Ich möchte vom Stammverzeichnis zu allen anderen Verzeichnissen darin navigieren und dasselbe drucken.
Hier ist mein Code:
#!/usr/bin/python
import os
import fnmatch
for root, dir, files in os.walk("."):
print root
print ""
for items in fnmatch.filter(files, "*"):
print "..." + items
print ""
Und hier ist mein O / P:
.
...Python_Notes
...pypy.py
...pypy.py.save
...classdemo.py
....goutputstream-J9ZUXW
...latest.py
...pack.py
...classdemo.pyc
...Python_Notes~
...module-demo.py
...filetype.py
./packagedemo
...classdemo.py
...__init__.pyc
...__init__.py
...classdemo.pyc
Oben .
und ./packagedemo
sind Verzeichnisse.
Ich muss das O / P jedoch folgendermaßen drucken:
A
---a.txt
---b.txt
---B
------c.out
Oben, A
und B
sind Verzeichnisse und der Rest sind Dateien.
Antworten:
Dadurch erhalten Sie das gewünschte Ergebnis
quelle
os.walk(u".")
weil Pfade Unicode sein können.os.path.curdir
os.path.walk
eine Weile benutzt, alsoos.walk
ist es neu für mich! Kühle Bohnen.basepath
gleich in deinem Code?Versuche dies:
Sie werden dies bekommen:
quelle
print(FileTreeMaker().make(args),file=tree)
aber es gibt mir'charmap' codec can't encode characters in position 17-21: character maps to <undefined>
os.listdir()
. Dein ist viel besser; Ich konnte die Rekursion nicht richtig machen, sie funktionierte nur 2 oder 3 Schichten tief. Am Ende habe ich mich entschlossen, esos.walk()
stattdessen noch einmal von Grund auf zu versuchen , was ich für weitaus besser geeignet hielt. Ich bin überrascht, dass Sie es hier überhaupt nicht benutzt haben.Es gibt dafür geeignetere Funktionen im
os
Paket. Aber wenn Sie verwenden müssen,os.walk
ist hier, was ich mit kommenAusgabe:
quelle
os.listdir
aber die Lösung von @ ajay schlägt das.Sie können verwenden
os.walk
, und das ist wahrscheinlich die einfachste Lösung, aber hier ist eine andere Idee zu untersuchen:Möglicherweise erkennen Sie die folgende Dokumentation am Befehl TREE im Windows-Terminal:
quelle
Rekursiver Spaziergang durch ein Verzeichnis, in dem Sie ALLE Dateien aus allen Verzeichnissen im aktuellen Verzeichnis und ALLE Verzeichnisse aus dem aktuellen Verzeichnis abrufen - da die obigen Codes keine Einfachheit haben (imho):
quelle
os.path.join(root, filename)
der vollständige Pfad zur Datei angegeben wird, auch wenn die Datei in mehreren Verzeichnissen verschachtelt ist.Dies geschieht für Ordnernamen:
quelle
quelle
Gehen Sie bei einem Ordnernamen rekursiv durch die gesamte Hierarchie.
quelle
Wäre der beste Weg
quelle
dir + d
gehe davon aus, dass der Fehler vorliegt, der sie möglicherweise ohne Verzeichnistrennzeichen betrifft. Es ist wahrscheinlich besser,os.path.join
Verzeichnisse mit Dateinamen zuVersuchen Sie dies; Einfaches
======== AUSGABE unten ========
quelle
Versuche dies:
Hier nehme ich Ihren Weg als "." in dem sich die root_file und andere Verzeichnisse befinden. Grundsätzlich iterieren wir also nur mit dem Aufruf next () durch den Baum, da unser os.walk nur eine generative Funktion ist. Auf diese Weise können wir alle Verzeichnis- und Dateinamen in dir_names bzw. file_names speichern.
quelle
Sie können auch rekursiv durch einen Ordner gehen und den gesamten Inhalt mit pathlib.Path () auflisten.
Ausgabe:
quelle
quelle