Jak uzyskać listę wszystkich plików (i katalogów) w danym katalogu w Pythonie?
572
Jak uzyskać listę wszystkich plików (i katalogów) w danym katalogu w Pythonie?
Jest to sposób na przejrzenie każdego pliku i katalogu w drzewie katalogów:
import os
for dirname, dirnames, filenames in os.walk('.'):
# print path to all subdirectories first.
for subdirname in dirnames:
print(os.path.join(dirname, subdirname))
# print path to all filenames.
for filename in filenames:
print(os.path.join(dirname, filename))
# Advanced usage:
# editing the 'dirnames' list will stop os.walk() from recursing into there.
if '.git' in dirnames:
# don't go into any .git directories.
dirnames.remove('.git')
for subdirname in dirnames: if subdirname != '.git'
Możesz użyć
Dla odniesienia i więcej funkcji OS spójrz tutaj:
źródło
os.scandir
jednak używanie zamiast tego, ponieważ w wielu przypadkach pozwala to zapobiegać wywołaniom systemowym, zapewniając bezpłatne przyspieszenie (zarówno IPC, jak i IO są wolne).os.path.isdir
.Oto funkcja pomocnika, z której często korzystam:
źródło
źródło
r'C:\temp'
jest jaśniejszy i preferowany od"C:\\temp"
Rawstringów jest lepszy niż unikanie ukośników odwrotnych.Jeśli potrzebujesz umiejętności globowania, istnieje również moduł do tego. Na przykład:
zwróci coś takiego:
Zobacz dokumentację tutaj .
źródło
Spróbuj tego:
źródło
Dla plików w bieżącym katalogu roboczym bez określenia ścieżki
Python 2.7:
Python 3.x:
Dziękujemy Stamowi Kalyowi za komentarz do Pythona 3.x
źródło
os.listdir()
domyślnie wyświetla listę elementów w bieżącym katalogu! Więc nie ma potrzebyos.getcwd()
:)Implementacja rekurencyjna
źródło
Napisałem długą wersję ze wszystkimi potrzebnymi opcjami: http://sam.nipl.net/code/python/find.py
Myślę, że tutaj też będzie pasować:
źródło
Oto kolejna opcja.
Zwraca iterator obiektów os.DirEntry odpowiadających wpisom (wraz z informacjami o atrybutach pliku) w katalogu podanym przez ścieżkę.
Przykład:
Użycie scandir () zamiast listdir () może znacznie zwiększyć wydajność kodu, który również potrzebuje informacji o typie pliku lub atrybucie pliku , ponieważ obiekty os.DirEntry ujawniają te informacje, jeśli system operacyjny udostępnia je podczas skanowania katalogu. Wszystkie metody os.DirEntry mogą wykonywać wywołanie systemowe, ale is_dir () i is_file () zwykle wymagają tylko wywołania systemowego dla dowiązań symbolicznych; os.DirEntry.stat () zawsze wymaga wywołania systemowego w systemie Unix, ale wymaga tylko jednego dla dowiązań symbolicznych w systemie Windows.
Python Docs
źródło
Chociaż
os.listdir()
generowanie listy nazw plików i katalogów jest w porządku, często po zrobieniu tych nazw chcesz zrobić więcej - aw Pythonie 3 pathlib upraszcza te inne obowiązki. Zobaczmy, czy podoba ci się tak samo jak ja.Aby wyświetlić zawartość katalogu, zbuduj obiekt Path i chwyć iterator:
Jeśli chcemy tylko listę nazw rzeczy:
Jeśli chcesz tylko katalogów:
Jeśli chcesz mieć nazwy wszystkich plików conf w tym drzewie:
Jeśli chcesz listę plików conf w drzewie> = 1K:
Rozwiązywanie względnych ścieżek staje się łatwe:
Nawigacja za pomocą ścieżki jest dość prosta (choć nieoczekiwana):
źródło
Przyjemny jeden linijka, aby rekursywnie wyświetlać tylko pliki. Użyłem tego w mojej dyrektywie setup.py pakiet_danych:
Wiem, że to nie jest odpowiedź na pytanie, ale może się przydać
źródło
Dla Python 2
Dla Python 3
Aby filtrować i mapować, musisz owinąć je list ()
Zaleca się teraz, aby zastąpić korzystanie z mapy i filtru wyrażeniami generatorów lub list:
źródło
Oto jednowierszowa wersja w języku Python:
Ten kod zawiera pełną ścieżkę wszystkich plików i katalogów w podanej nazwie katalogu.
źródło
Wiem, że to stare pytanie. To fajny sposób, z jakim się spotkałem, jeśli używasz maszyny Liunx.
źródło
źródło
FYI Dodaj filtr rozszerzenia pliku importu rozszerzenia lub pliku os
źródło
Jeśli to wymyślone, wrzucę to. Prosty i brudny sposób wyszukiwania symboli wieloznacznych.
źródło
Poniższy kod wyświetli katalogi i pliki w katalogu
źródło
Ten, który pracował ze mną, to rodzaj zmodyfikowanej wersji z odpowiedzi Saleha powyżej.
Kod jest następujący:
"katalog =„ nazwa_katalogu_danego ”nazwy plików = [ścieżka.path.abspath (ścieżka.pjo.join (katalog, i)) dla i w katalogu os.listdir (katalog)]”
źródło