Ich muss alles durchlaufen .asm
Dateien in einem bestimmten Verzeichnis und einige Aktionen ausführen.
Wie kann dies effizient durchgeführt werden?
Ursprüngliche Antwort:
import os
for filename in os.listdir(directory):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Python 3.6-Version der obigen Antwort unter Verwendung von os
- vorausgesetzt, Sie haben den Verzeichnispfad als str
Objekt in einer Variablen namens directory_in_str
:
import os
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Oder rekursiv mit pathlib
:
from pathlib import Path
pathlist = Path(directory_in_str).glob('**/*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
directory = os.fsencode(directory_in_str) for file in os.listdir(directory): filename = os.fsdecode(file) if filename.endswith(".asm") or filename.endswith(".py"): # print(os.path.join(directory, filename)) continue else: continue
print(os.path.join(directory, filename))
müssen geändert werden,print(os.path.join(directory_in_str, filename))
damit es in Python 3.6 funktioniertfor entry in os.scandir(path): print(entry.path)
if filename.endswith((".asm", ".py")):
zuif filename.endswith(".asm") or filename.endswith(".py"):
Dadurch werden alle untergeordneten Dateien durchlaufen, nicht nur die unmittelbaren untergeordneten Dateien des Verzeichnisses:
quelle
Sie können versuchen, das Glob- Modul zu verwenden:
und seit Python 3.5 können Sie auch Unterverzeichnisse durchsuchen:
Aus den Dokumenten:
quelle
Seit Python 3.5 ist es mit os.scandir ( ) viel einfacher
quelle
entry
ist ein posix.DirEntry Typ mit einem Bündel von praktischen Methoden wieentry.is_dir()
,is_file()
,is_symlink()
Python 3.4 und höher bieten pathlib in der Standardbibliothek an. Du könntest es tun:
Oder wenn Sie Listenverständnisse nicht mögen:
Path
Objekte können einfach in Zeichenfolgen konvertiert werden.quelle
So iteriere ich durch Dateien in Python:
KEINE DIESER TECHNIKEN GARANTIERT JEDE ITERATIONSBESTELLUNG
Ja, super unberechenbar. Beachten Sie, dass ich die Dateinamen sortiere, was wichtig ist, wenn die Reihenfolge der Dateien wichtig ist, dh für Videobilder oder zeitabhängige Datenerfassung. Stellen Sie jedoch sicher, dass Ihre Dateinamen Indizes enthalten!
quelle
from pkg_resources import parse_version
undfilenames.sort(key=parse_version)
tat es.Sie können glob verwenden, um auf das Verzeichnis und die Liste zu verweisen:
Um die Liste aller Verzeichnisse im Array abzurufen, können Sie os verwenden :
quelle
Ich bin noch nicht ganz zufrieden mit dieser Implementierung. Ich wollte einen benutzerdefinierten Konstruktor, der dies tut
DirectoryIndex._make(next(os.walk(input_path)))
, sodass Sie einfach den Pfad übergeben können, für den Sie eine Dateiliste wünschen. Änderungen willkommen!quelle
Ich verwende sehr gerne die
scandir
Direktive, die in dieos
Bibliothek integriert ist. Hier ist ein Arbeitsbeispiel:quelle