Wie erhalte ich eine Liste aller Dateien (und Verzeichnisse) in einem bestimmten Verzeichnis in Python?
572
Wie erhalte ich eine Liste aller Dateien (und Verzeichnisse) in einem bestimmten Verzeichnis in Python?
Dies ist eine Möglichkeit, jede Datei und jedes Verzeichnis in einem Verzeichnisbaum zu durchlaufen:
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'
Sie können verwenden
Als Referenz und weitere Betriebssystemfunktionen finden Sie hier:
quelle
os.scandir
jedoch empfohlen, stattdessen zu verwenden , da Sie in vielen Fällen Systemaufrufe verhindern und eine kostenlose Beschleunigung erzielen können (sowohl IPC als auch E / A sind langsam).os.path.isdir
.Hier ist eine Hilfsfunktion, die ich ziemlich oft benutze:
quelle
quelle
r'C:\temp'
ist klarer und"C:\\temp"
Rawstrings vorzuziehen sind Backslashes vorzuziehen.Wenn Sie Globbing-Fähigkeiten benötigen, gibt es auch dafür ein Modul. Zum Beispiel:
wird etwas zurückgeben wie:
Siehe die Dokumentation hier .
quelle
Versuche dies:
quelle
Für Dateien im aktuellen Arbeitsverzeichnis ohne Angabe eines Pfads
Python 2.7:
Python 3.x:
Vielen Dank an Stam Kaly für den Kommentar zu Python 3.x.
quelle
os.listdir()
listet standardmäßig Elemente im aktuellen Verzeichnis auf! Also keine Notwendigkeit füros.getcwd()
:)Eine rekursive Implementierung
quelle
Ich habe eine lange Version mit allen Optionen geschrieben, die ich möglicherweise benötige: http://sam.nipl.net/code/python/find.py
Ich denke, es wird auch hier passen:
quelle
Hier ist eine weitere Option.
Es gibt einen Iterator von os.DirEntry-Objekten zurück, die den Einträgen (zusammen mit Dateiattributinformationen) in dem durch path angegebenen Verzeichnis entsprechen.
Beispiel:
Die Verwendung von scandir () anstelle von listdir () kann die Leistung von Code erheblich verbessern, der auch Dateityp- oder Dateiattributinformationen benötigt , da os.DirEntry-Objekte diese Informationen verfügbar machen, wenn das Betriebssystem sie beim Scannen eines Verzeichnisses bereitstellt. Alle os.DirEntry-Methoden können einen Systemaufruf ausführen, aber is_dir () und is_file () erfordern normalerweise nur einen Systemaufruf für symbolische Links. os.DirEntry.stat () erfordert unter Unix immer einen Systemaufruf, unter Windows jedoch nur einen für symbolische Links.
Python-Dokumente
quelle
Während das
os.listdir()
Erstellen einer Liste von Datei- und Verzeichnisnamen in Ordnung ist, möchten Sie häufig mehr tun, sobald Sie diese Namen haben - und in Python3 vereinfacht pathlib diese anderen Aufgaben. Lassen Sie uns einen Blick darauf werfen und sehen, ob es Ihnen genauso gut gefällt wie mir.Um Verzeichnisinhalte aufzulisten, erstellen Sie ein Pfadobjekt und greifen Sie auf den Iterator zu:
Wenn wir nur eine Liste von Namen von Dingen wollen:
Wenn Sie nur die dirs wollen:
Wenn Sie die Namen aller conf-Dateien in diesem Baum möchten:
Wenn Sie eine Liste von conf-Dateien im Baum> = 1K möchten:
Das Auflösen relativer Pfade wird einfach:
Das Navigieren mit einem Pfad ist ziemlich klar (obwohl unerwartet):
quelle
Ein netter Einzeiler, um nur die Dateien rekursiv aufzulisten. Ich habe dies in meiner Anweisung setup.py package_data verwendet:
Ich weiß, dass es nicht die Antwort auf die Frage ist, aber es kann nützlich sein
quelle
Für Python 2
Für Python 3
Für Filter und Karte müssen Sie sie mit list () umschließen
Die Empfehlung lautet nun, dass Sie Ihre Verwendung von Map und Filter durch Generatorausdrücke oder Listenverständnisse ersetzen:
quelle
Hier ist eine einzeilige pythonische Version:
Dieser Code listet den vollständigen Pfad aller Dateien und Verzeichnisse im angegebenen Verzeichnisnamen auf.
quelle
Ich weiß, das ist eine alte Frage. Dies ist eine nette Art und Weise, wie ich auf eine Liunx-Maschine gestoßen bin.
quelle
quelle
Zu Ihrer Information Fügen Sie einen Filter für den Import von Erweiterungs- oder Ext-Dateiimporten hinzu
quelle
Wenn ich das mir vorstellen würde, würde ich das einwerfen. Einfache und schmutzige Art, Wildcard-Suchen durchzuführen.
quelle
Der folgende Code listet Verzeichnisse und die Dateien im Verzeichnis auf
quelle
Die, die mit mir gearbeitet hat, ist eine Art modifizierte Version von Salehs Antwort oben.
Der Code lautet wie folgt:
"dir = 'angegebener_Verzeichnisname' Dateinamen = [os.path.abspath (os.path.join (dir, i)) für i in os.listdir (dir)]"
quelle