Wie kann ich alle Dateien in einem Verzeichnis mit der Erweiterung .txt
in Python?
Antworten
Zu viele Anzeigen?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')]
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
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)]
- See previous answers
- Weitere Antworten anzeigen