Få en lista över fil- och katalognamn i Python.

Företag

För att få en lista över fil- och katalognamn (mappnamn) i Python använder du modulen os-modulens funktion os.listdir().

os.listdir(path='.')
Återger en lista som innehåller namnen på posterna i den katalog som anges av path.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Os-modulen ingår i standardbiblioteket och behöver inte installeras. Det krävs dock ”import”.

Här finns följande information.

  • Hämta en lista med både fil- och katalognamn.
  • Hämta endast en lista med filnamn
  • Hämta endast en lista med katalognamn

Följande är ett exempel på en filstruktur (katalog).

.
└── testdir
    ├── dir1
    ├── dir2
    ├── file1
    ├── file2.txt
    └── file3.jpg

Förutom os.listdir() kan du också använda glob-modulen för att få en lista över fil- och katalognamn (mappnamn). glob gör det möjligt att ange villkor med hjälp av jokertecken (*), etc., och rekursivt inkludera underkataloger.

I Python 3.4 och senare är det också möjligt att få fram en lista över filer och kataloger med hjälp av pathlib-modulen, som kan hantera sökvägar som objekt. Liksom globs ovan kan den också användas villkorligt och rekursivt.

Hämta en lista med både fil- och katalognamn.

Om du använder os.listdir() som vanligt kommer det att ge en lista med både fil- och katalognamn.

import os

path = "./testdir"

files = os.listdir(path)
print(type(files))  # <class 'list'>
print(files)        # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']

Du får en lista med söksträngar.

Hämta endast en lista med filnamn

Om du vill få en lista med enbart filnamn använder du funktionen os.path.isfile() för att avgöra om sökvägen är en fil.Det fungerar inte att skicka enbart filnamnet som argument för funktionen os.path.isfile(), utan du måste skicka hela sökvägen som visas nedan.
os.path.isfile(os.path.join(path, f))

files = os.listdir(path)
files_file = [f for f in files if os.path.isfile(os.path.join(path, f))]
print(files_file)   # ['file1', 'file2.txt', 'file3.jpg']

Hämta endast en lista med katalognamn

Om du bara vill få en lista med katalognamn använder du os.path.isdir() på samma sätt.

files = os.listdir(path)
files_dir = [f for f in files if os.path.isdir(os.path.join(path, f))]
print(files_dir)    # ['dir1', 'dir2']