Chcete-li v jazyce Python získat seznam názvů souborů a adresářů (názvů složek), použijte funkci modulu os os.listdir().
os.listdir(path='.')
Vrací seznam obsahující názvy položek v adresáři zadaném cestou.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Modul os je součástí standardní knihovny a není třeba jej instalovat. Je však vyžadován příkaz „import“.
Zde jsou uvedeny následující informace.
- Získání seznamu názvů souborů i adresářů.
- Získat pouze seznam názvů souborů
- Získat pouze seznam názvů adresářů
Následuje příklad struktury souborů (adresářů).
. └── testdir ├── dir1 ├── dir2 ├── file1 ├── file2.txt └── file3.jpg
Kromě modulu os.listdir() můžete k získání seznamu názvů souborů a adresářů (adresářů) použít také modul glob. glob umožňuje zadávat podmínky pomocí zástupných znaků (*) atd. a rekurzivně zahrnovat podadresáře.
V jazyce Python 3.4 a novějších verzích je také možné získat seznam souborů a adresářů pomocí modulu pathlib, který umí pracovat s cestami jako s objekty. Stejně jako výše uvedené globs jej lze použít podmíněně a rekurzivně.
Získání seznamu názvů souborů i adresářů.
Pokud použijete funkci os.listdir() tak, jak je, vrátí seznam názvů souborů i adresářů.
import os path = "./testdir" files = os.listdir(path) print(type(files)) # <class 'list'> print(files) # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']
Získáte seznam řetězců cest.
Získat pouze seznam názvů souborů
Pokud chcete získat pouze seznam názvů souborů, použijte funkci os.path.isfile(), která určí, zda je cesta souborem. předání pouze názvu souboru jako argumentu funkce os.path.isfile() nebude fungovat, proto předejte celou cestu, jak je uvedeno níže.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']
Získat pouze seznam názvů adresářů
Pokud chcete získat pouze seznam názvů adresářů, použijte stejným způsobem os.path.isdir().
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']