Ich möchte nur die Verzeichnisse in einem Ordner auflisten können. Dies bedeutet, dass ich weder Dateinamen noch zusätzliche Unterordner auflisten möchte.
Mal sehen, ob ein Beispiel hilft. Im aktuellen Verzeichnis haben wir:
>>> os.listdir(os.getcwd())
['cx_Oracle-doc', 'DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'mod_p
ython-wininst.log', 'NEWS.txt', 'pymssql-wininst.log', 'python.exe', 'pythonw.ex
e', 'README.txt', 'Removemod_python.exe', 'Removepymssql.exe', 'Scripts', 'tcl',
'Tools', 'w9xpopen.exe']
Ich möchte jedoch nicht, dass Dateinamen aufgelistet werden. Ich möchte auch keine Unterordner wie \ Lib \ curses. Im Wesentlichen funktioniert das, was ich möchte, mit Folgendem:
>>> for root, dirnames, filenames in os.walk('.'):
... print dirnames
... break
...
['cx_Oracle-doc', 'DLLs', 'Doc', 'include', 'Lib', 'libs', 'Scripts', 'tcl', 'Tools']
Ich frage mich jedoch, ob es einen einfacheren Weg gibt, die gleichen Ergebnisse zu erzielen. Ich habe den Eindruck, dass die Verwendung von os.walk nur zur Rückgabe der obersten Ebene ineffizient / zu viel ist.
python
filesystems
fuentesjr
quelle
quelle
os.walk
Verwendung
os.walk
mitnext
Item-Funktion:Für Python <= 2.5 verwenden Sie:
Wie das funktioniert
os.walk
ist ein Generator und der Aufrufnext
erhält das erste Ergebnis in Form eines 3-Tupels (dirpath, dirnames, filenames). Somit gibt der[1]
Index nur dasdirnames
von diesem Tupel zurück.quelle
DIRNAMES=1
und es dannnext()[DIRNAMES]
für zukünftige Code-Betreuer verständlicher machen.os.walk( os.path.join(mypath,'.')).next()[1]
sorted( [os.path.join(os.getcwd(), item) for item in os.walk(os.curdir).next()[1]] )
Filtern Sie die Liste mit os.path.isdir, um Verzeichnisse zu erkennen.
quelle
os.listdir
ein Datei- / Ordnername zurückgegeben wird, an den weitergegebenos.path.isdir
wird, letzterer jedoch einen vollständigen Pfad benötigt.timeit(os.walk(os.getcwd()).next()[1])
1000 loops, best of 3: 734 µs per loop
timeit(filter(os.path.isdir, os.listdir(os.getcwd())))
1000 loops, best of 3: 477 µs per loop
quelle
Beachten Sie, dass dies
os.listdir(os.getcwd())
vorzuziehen istos.listdir(os.path.curdir)
. Ein Funktionsaufruf weniger, und es ist genauso portabel.Um die Antwort zu vervollständigen und eine Liste der Verzeichnisse in einem Ordner zu erhalten:
Wenn Sie vollständige Pfadnamen bevorzugen, verwenden Sie diese Funktion:
quelle
Dies scheint auch zu funktionieren (zumindest unter Linux):
quelle
glob
. Es kann Ihnen viel Code sparen, insbesondere Iterationen, und ist der Verwendung von UNIX-Terminals sehr ähnlich (ls
)Nur um hinzuzufügen, dass die Verwendung von os.listdir () nicht "viel Verarbeitung im Vergleich zu sehr einfachem os.walk (). Next () [1] erfordert" . Dies liegt daran, dass os.walk () os.listdir () intern verwendet. In der Tat, wenn Sie sie zusammen testen:
Das Filtern von os.listdir () ist etwas schneller.
quelle
scandir
Paket - ist ab Python 2.6 als installierbares Paket auf PyPI verfügbar. Es bietet Ersatz füros.walk
undos.listdir
das ist viel schneller.Eine sehr viel einfachere und elegantere Möglichkeit besteht darin, Folgendes zu verwenden:
Führen Sie dieses Skript in demselben Ordner aus, für den Sie Ordnernamen möchten. Es gibt Ihnen nur genau den Namen des unmittelbaren Ordners (auch dies ohne den vollständigen Pfad der Ordner).
quelle
Listenverständnis verwenden,
Ich denke, es ist der einfachste Weg
quelle
Da ich hier ein Neuling bin, kann ich noch keinen direkten Kommentar abgeben, aber hier ist eine kleine Korrektur, die ich dem folgenden Teil der Antwort von ΤΖΩΤΖΙΟΥ hinzufügen möchte :
für diejenigen, die noch auf Python <2.4 sind : Das innere Konstrukt muss eine Liste anstelle eines Tupels sein und sollte daher folgendermaßen lauten:
Andernfalls wird ein Syntaxfehler angezeigt.
quelle
quelle
Für eine Liste der vollständigen Pfadnamen ziehe ich diese Version den anderen Lösungen hier vor:
quelle
quelle
Eine sicherere Option, die nicht fehlschlägt, wenn kein Verzeichnis vorhanden ist.
quelle
Wie so?
quelle
Python 3.4 führte das
pathlib
Modul in die Standardbibliothek ein, die einen objektorientierten Ansatz für die Verarbeitung von Dateisystempfaden bietet:quelle
quelle