Uzyskaj listę nazw plików i katalogów w Pythonie.

Biznes

Aby uzyskać listę nazw plików i katalogów (nazw folderów) w Pythonie, użyj funkcji modułu os.listdir().

os.listdir(path='.')
Zwraca listę zawierającą nazwy wpisów w katalogu określonym przez ścieżkę.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Moduł os jest zawarty w bibliotece standardowej i nie musi być instalowany. Jednakże, „import” jest wymagany.

Podane są tu następujące informacje.

  • Uzyskaj listę nazw zarówno plików jak i katalogów.
  • Pobierz listę tylko nazw plików
  • Pobierz listę tylko nazw katalogów

Poniżej znajduje się przykład struktury plików (katalogów).

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

Oprócz os.listdir(), możesz również użyć modułu glob do uzyskania listy nazw plików i katalogów (nazw folderów). glob pozwala na określenie warunków przy użyciu symboli wieloznacznych (*), itp. oraz rekursywne uwzględnianie podkatalogów.

W Pythonie 3.4 i nowszych, możliwe jest również uzyskanie listy plików i katalogów za pomocą modułu pathlib, który może manipulować ścieżkami jako obiektami. Podobnie jak globy powyżej, można go również używać warunkowo i rekursywnie.

Uzyskaj listę nazw zarówno plików jak i katalogów.

Jeśli użyjesz os.listdir() jako takiej, zwróci ona listę zarówno nazw plików jak i katalogów.

import os

path = "./testdir"

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

To, co otrzymasz, to lista łańcuchów ścieżek.

Pobierz listę tylko nazw plików

Jeśli chcesz otrzymać listę tylko nazw plików, użyj funkcji os.path.isfile() aby określić czy ścieżka jest plikiem. Przekazanie tylko nazwy pliku jako argumentu funkcji os.path.isfile() nie zadziała, więc podaj pełną ścieżkę jak pokazano poniżej.
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']

Pobierz listę tylko nazw katalogów

Jeśli chcesz uzyskać listę tylko nazw katalogów, użyj os.path.isdir() w ten sam sposób.

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