Získání seznamu názvů souborů a adresářů v jazyce Python.

Podnikání

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']