1041 Stimmen

Alle Dateien in einem Verzeichnis mit der Erweiterung .txt in Python finden

Wie kann ich alle Dateien in einem Verzeichnis mit der Erweiterung .txt in Python?

22voto

Anuvrat Parashar Punkte 2752

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

22voto

ewalel Punkte 1666

Alle '.txt'-Dateinamen innerhalb des Ordners 'dataPath' als Liste in Pythonischer Weise erhalten:

from os import listdir
from os.path import isfile, join
path = "/dataPath/"
onlyTxtFiles = [f for f in listdir(path) if isfile(join(path, f)) and  f.endswith(".txt")]
print onlyTxtFiles

19voto

Xxxo Punkte 1610

Python hat alle Werkzeuge, um dies zu tun:

import os

the_dir = 'the_dir_that_want_to_search_in'
all_txt_files = filter(lambda x: x.endswith('.txt'), os.listdir(the_dir))

13voto

user136036 Punkte 8980

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

11voto

Kamen Tsvetkov Punkte 409

Um ein Array von ".txt"-Dateinamen aus einem Ordner namens "data" im selben Verzeichnis zu erhalten, verwende ich normalerweise diese einfache Codezeile:

import os
fileNames = [fileName for fileName in os.listdir("data") if fileName.endswith(".txt")]

CodeJaeger.com

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.

Powered by:

X