Ich versuche, ein Skript zu erstellen, um alle Verzeichnisse, Unterverzeichnisse und Dateien in einem bestimmten Verzeichnis aufzulisten.
Ich habe es versucht:
import sys,os
root = "/home/patate/directory/"
path = os.path.join(root, "targetdirectory")
for r,d,f in os.walk(path):
for file in f:
print os.path.join(root,file)
Leider funktioniert es nicht richtig.
Ich bekomme alle Dateien, aber nicht ihre vollständigen Pfade.
Zum Beispiel, wenn die dir-Struktur wäre:
/home/patate/directory/targetdirectory/123/456/789/file.txt
Es würde drucken:
/home/patate/directory/targetdirectory/file.txt
Was ich brauche, ist das erste Ergebnis. Jede Hilfe wäre sehr dankbar! Vielen Dank.
Nur für den Fall ... Alle Dateien im Verzeichnis und in den Unterverzeichnissen, die einem bestimmten Muster entsprechen (z. B. * .py):
quelle
Hier ist ein Einzeiler:
Die äußerste
val for sublist in ...
Schleife glättet die Liste eindimensional. Diej
Schleife sammelt eine Liste aller Dateibasennamen und verknüpft sie mit dem aktuellen Pfad. Schließlichi
durchläuft die Schleife alle Verzeichnisse und Unterverzeichnisse.In diesem Beispiel wird der fest codierte Pfad
./
imos.walk(...)
Aufruf verwendet. Sie können eine beliebige Pfadzeichenfolge ergänzen.Hinweis:
os.path.expanduser
und / oderos.path.expandvars
kann für Pfadzeichenfolgen wie verwendet werden~/
Dieses Beispiel erweitern:
Es ist einfach, in Dateibasennamen-Tests und Verzeichnisnamen-Tests hinzuzufügen.
Beispiel: Testen auf
*.jpg
Dateien:Zusätzlich ohne das
.git
Verzeichnis:quelle
os.walk
über eine manuelle Dirlisting-Schleife empfehlen , Generatoren sind großartig, verwenden Sie sie.Konnte hier keine Antwort schreiben. Dies ist die klarste Zeile, die ich je gesehen habe:
quelle
Sie können sich dieses Beispiel ansehen, das ich gemacht habe. Es verwendet die Funktion os.path.walk, die veraltet ist. Vorsicht. Verwendet eine Liste zum Speichern aller Dateipfade
quelle
Ein bisschen einfacher Einzeiler:
quelle
Da jedes Beispiel hier nur
walk
(mitjoin
) verwendet, möchte ich ein schönes Beispiel und einen Vergleich zeigen mitlistdir
:Wie Sie selbst sehen können, ist die
listdir
Version viel effizienter. (und dasjoin
ist langsam)quelle