Ich muss die Anzahl der Dateien in einem Verzeichnis mit Python zählen.
Ich denke, der einfachste Weg ist len(glob.glob('*'))
, aber das zählt auch das Verzeichnis selbst als Datei.
Gibt es eine Möglichkeit, nur die Dateien in einem Verzeichnis zu zählen?
Antworten:
os.listdir()
wird etwas effizienter sein als zu verwendenglob.glob
. Verwenden Sie Folgendes, um zu testen, ob ein Dateiname eine normale Datei ist (und kein Verzeichnis oder eine andere Entität)os.path.isfile()
:quelle
folder_path
Innere hinzuzufügen,os.path.filename(name)
wenn Sie nicht auf dem CWD sind. stackoverflow.com/questions/17893542/…os.path.join(DIR, name)
overDIR + '/' + name
? Letzteres ist kürzer und meiner Meinung nach klarer als Ersteres. Gibt es vielleicht ein Betriebssystem, auf dem letzteres versagen würde?quelle
Für alle Arten von Dateien enthalten Unterverzeichnisse:
Nur Dateien (Unterverzeichnisse vermeiden):
quelle
Hier ist fnmatch sehr praktisch:
Weitere Details: http://docs.python.org/2/library/fnmatch.html
quelle
os.path.isfile()
der akzeptierten Antwort zu testen . Auch deutlich schneller alsglob.glob()
.Wenn Sie alle Dateien im Verzeichnis zählen möchten - einschließlich Dateien in Unterverzeichnissen -, ist der pythonischste Weg:
Wir verwenden eine Summe, die schneller ist als das explizite Hinzufügen der Dateizahlen (Timings ausstehend).
quelle
_
in einerfor
Schleife verwenden können.os.walk
auch ich weiß. Sie sind sich jedoch nicht sicher, was mit den Unterstrichen in dersum
Funktion los ist . Vielen Dank!quelle
quelle
Ich bin überrascht, dass niemand erwähnt hat
os.scandir
:quelle
Dies verwendet
os.listdir
und funktioniert für jedes Verzeichnis:Dies kann mit einem Generator vereinfacht und etwas beschleunigt werden mit:
quelle
Aus diesem Beitrag entnommen
quelle
files
ist eine Liste. 2. OP sucht nicht nach rekursiver Zählungquelle
Lukes Code neu formatieren.
quelle
Hier ist ein einfacher einzeiliger Befehl, den ich nützlich fand:
quelle
ls
ist im Allgemeinen verpönt (dies kann häufig zu Problemen führen), obwohl dies keine schlechte "Quick-and-Dirty" -Methode in der Shell ist. Sie sollten jedoch verwendenls -1
, damit eine Zeile pro Datei garantiert wird.Ich stimme zwar der Antwort von @DanielStutzbach zu:
os.listdir()
Wird etwas effizienter sein als die Verwendungglob.glob
.Eine zusätzliche Genauigkeit, wenn Sie die Anzahl bestimmter Dateien im Ordner zählen möchten, die Sie verwenden möchten
len(glob.glob())
. Wenn Sie beispielsweise alle PDFs in einem Ordner zählen möchten, den Sie verwenden möchten:quelle
Es ist einfach:
Es zählt einfach die Anzahl der Dateien im Verzeichnis. Ich habe die Listenverständnis-Technik verwendet, um durch ein bestimmtes Verzeichnis zu iterieren und alle Dateien zurückzugeben. "len (zurückgegebene Liste)" gibt die Anzahl der Dateien zurück.
quelle
quelle
Wenn Sie die Standard-Shell des Betriebssystems verwenden, können Sie das Ergebnis viel schneller erhalten als auf rein pythonische Weise.
Beispiel für Windows:
quelle
Ich habe eine andere Antwort gefunden, die als akzeptierte Antwort korrekt sein kann.
quelle
Ich habe
glob.iglob
für eine Verzeichnisstruktur ähnlich verwendetBeide der folgenden Optionen geben 4 zurück (wie erwartet, dh die Unterordner selbst werden nicht gezählt )
len(list(glob.iglob("data/train/*/*.png", recursive=True)))
sum(1 for i in glob.iglob("data/train/*/*.png"))
quelle
Ich habe dies getan und dies gab die Anzahl der Dateien im Ordner (Attack_Data) zurück ... das funktioniert gut.
quelle