Wie kann ich alle Dateien in einem Verzeichnis mit der Erweiterung .txt
in Python?
Antworten
Zu viele Anzeigen?Path.py ist eine weitere Alternative: https://github.com/jaraco/path.py
from path import path
p = path('/path/to/the/directory')
for f in p.files(pattern='*.txt'):
print f
Ich habe einen Test durchgeführt (Python 3.6.4, W7x64), um zu sehen, welche Lösung für einen Ordner, ohne Unterverzeichnisse, am schnellsten ist, um eine Liste der vollständigen Dateipfade für Dateien mit einer bestimmten Erweiterung zu erhalten.
Um es kurz zu machen, für diese Aufgabe os.listdir()
ist die schnellste und 1,7-mal so schnell wie die nächstbeste: os.walk()
(mit einer Pause!), 2,7x so schnell wie pathlib
, 3,2x schneller als os.scandir()
und 3,3x schneller als glob
.
Bitte bedenken Sie, dass sich diese Ergebnisse ändern, wenn Sie rekursive Ergebnisse benötigen. Wenn Sie eine der nachstehenden Methoden kopieren/einfügen, fügen Sie bitte ein .lower() hinzu, da sonst .EXT bei der Suche nach .ext nicht gefunden werden würde.
import os
import pathlib
import timeit
import glob
def a():
path = pathlib.Path().cwd()
list_sqlite_files = [str(f) for f in path.glob("*.sqlite")]
def b():
path = os.getcwd()
list_sqlite_files = [f.path for f in os.scandir(path) if os.path.splitext(f)[1] == ".sqlite"]
def c():
path = os.getcwd()
list_sqlite_files = [os.path.join(path, f) for f in os.listdir(path) if f.endswith(".sqlite")]
def d():
path = os.getcwd()
os.chdir(path)
list_sqlite_files = [os.path.join(path, f) for f in glob.glob("*.sqlite")]
def e():
path = os.getcwd()
list_sqlite_files = [os.path.join(path, f) for f in glob.glob1(str(path), "*.sqlite")]
def f():
path = os.getcwd()
list_sqlite_files = []
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(".sqlite"):
list_sqlite_files.append( os.path.join(root, file) )
break
print(timeit.timeit(a, number=1000))
print(timeit.timeit(b, number=1000))
print(timeit.timeit(c, number=1000))
print(timeit.timeit(d, number=1000))
print(timeit.timeit(e, number=1000))
print(timeit.timeit(f, number=1000))
Ergebnisse:
# Python 3.6.4
0.431
0.515
0.161
0.548
0.537
0.274