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?

4voto

Efreeto Punkte 1769

Hier ist eine mit extend()

types = ('*.jpg', '*.png')
images_list = []
for files in types:
    images_list.extend(glob.glob(os.path.join(path, files)))

3voto

Funktionale Lösung mit Unterverzeichnissen:

from fnmatch import filter
from functools import partial
from itertools import chain
from os import path, walk

print(*chain(*(map(partial(path.join, root), filter(filenames, "*.txt")) for root, _, filenames in walk("mydir"))))

2voto

tashuhka Punkte 4768

Falls der Ordner sehr viele Dateien enthält oder der Speicherplatz begrenzt ist, sollten Sie Generatoren verwenden:

def yield_files_with_extensions(folder_path, file_extension):
   for _, _, files in os.walk(folder_path):
       for file in files:
           if file.endswith(file_extension):
               yield file

Option A: Iterieren

for f in yield_files_with_extensions('.', '.txt'): 
    print(f)

Option B: Alle erhalten

files = [f for f in yield_files_with_extensions('.', '.txt')]

1voto

Rajiv Sharma Punkte 5964

Python verwenden OS Modul, um Dateien mit bestimmten Erweiterungen zu finden.

Das einfache Beispiel finden Sie hier:

import os

# This is the path where you want to search
path = r'd:'  

# this is extension you want to detect
extension = '.txt'   # this can be : .jpg  .png  .xls  .log .....

for root, dirs_list, files_list in os.walk(path):
    for file_name in files_list:
        if os.path.splitext(file_name)[-1] == extension:
            file_name_path = os.path.join(root, file_name)
            print file_name
            print file_name_path   # This is the full path of the filter file

1voto

kfsone Punkte 22501

Viele Nutzer haben geantwortet mit os.walk Antworten, die alle Dateien, aber auch alle Verzeichnisse und Unterverzeichnisse und deren Dateien umfassen.

import os

def files_in_dir(path, extension=''):
    """
       Generator: yields all of the files in <path> ending with
       <extension>

       \param   path       Absolute or relative path to inspect,
       \param   extension  [optional] Only yield files matching this,

       \yield              [filenames]
    """

    for _, dirs, files in os.walk(path):
        dirs[:] = []  # do not recurse directories.
        yield from [f for f in files if f.endswith(extension)]

# Example: print all the .py files in './python'
for filename in files_in_dir('./python', '*.py'):
    print("-", filename)

Oder für einen einmaligen Einsatz, bei dem Sie keinen Generator benötigen:

path, ext = "./python", ext = ".py"
for _, _, dirfiles in os.walk(path):
    matches = (f for f in dirfiles if f.endswith(ext))
    break

for filename in matches:
    print("-", filename)

Wenn Sie Streichhölzer für etwas anderes verwenden wollen, sollten Sie sie als Liste und nicht als Generatorausdruck verwenden:

    matches = [f for f in dirfiles if f.endswith(ext)]

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