Wie erhalte ich eine Liste aller Dateien (und Verzeichnisse) in einem bestimmten Verzeichnis in Python?
Und wenn Sie diesen Code (so wie er ist) in der Python-Shell ausführen, denken Sie daran, dass Strg+C die Ausgabe in der Shell anhält ;)
Wie erhalte ich eine Liste aller Dateien (und Verzeichnisse) in einem bestimmten Verzeichnis in Python?
Auf diese Weise können Sie alle Dateien und Verzeichnisse in einem Verzeichnisbaum durchsuchen:
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')
Und wenn Sie diesen Code (so wie er ist) in der Python-Shell ausführen, denken Sie daran, dass Strg+C die Ausgabe in der Shell anhält ;)
Sie können sogar die Liste der Verzeichnisnamen bearbeiten, um zu verhindern, dass bestimmte Pfade immer wieder aufgerufen werden.
Sie können verwenden
os.listdir(path)
Eine Referenz und weitere os-Funktionen finden Sie hier:
Nun, die ursprüngliche Frage ist so vage, dass man nicht weiß, ob eine rekursive Lösung gewünscht wird. "alle Dateien in einem Verzeichnis" könnte als rekursiv interpretiert werden.
@Tommy, ein "Verzeichnis" ist eine klar definierte Datenstruktur, und es bezieht sich auf "ls" und nicht auf "ls -R". Außerdem arbeiten fast alle UNIX-Tools standardmäßig nicht rekursiv. Ich weiß nicht, was der Fragesteller bedeutete sondern was er schrieb war klar.
Die Python 3-Dokumente sagen, dass Sie verwenden os.scandir
zu verwenden, da Sie damit in vielen Fällen Systemaufrufe vermeiden können, was zu einer kostenlosen Beschleunigung führt (sowohl IPC als auch IO sind langsam).
@RobertSiemer das hängt von der Verwendung ab. In vielen Fällen wäre eine Liste besser, aber ich denke, ein Generator ist vielseitiger, da er in eine Liste umgewandelt werden kann. Es kommt darauf an, ob Sie nach Vielseitigkeit oder nach einer etwas schlankeren Lösung suchen.
r'C:\temp'
ist klarer und vorzuziehen gegenüber "C:\\temp"
Rawstrings sind der Verwendung von Backslashes vorzuziehen.
@martineau: es gibt keinen Konsens; das ist wie emacs-vs-vi. Forward-slash ist vorzuziehen, weil es nicht als Escaping-Zeichen fehlinterpretiert werden kann, aber backward-slash ist immer noch beliebter...
Wenn Sie Globbing-Fähigkeiten benötigen, gibt es auch dafür ein Modul. Zum Beispiel:
import glob
glob.glob('./[0-9].*')
wird etwas wie zurückgeben:
['./1.gif', './2.txt']
Siehe die Dokumentation aquí .
Das ist wirklich genial! können Sie Negation in diesen übereinstimmenden Ausdruck haben? wie alles außer Dateien übereinstimmenden THIS
Muster?
@CharlieParker: Du kannst es nicht direkt mit glob
aber man kann ziemlich leicht mit ihm oder os.listdir()
in Verbindung mit dem re
Modul für reguläre Ausdrücke - siehe diese Antwort zu einer anderen Frage.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
2 Stimmen
Rekursiv oder nicht? Bitte klären Sie das. Für nicht rekursive Lösungen siehe: stackoverflow.com/questions/973473/