Rekursive Unterordnersuche und Dateiabruf
Im Bereich der Programmierung kann das Durchsuchen von Verzeichnissen und das Abrufen von Dateien eine häufige Aufgabe sein. Ein effizienter Ansatz besteht darin, einen rekursiven Algorithmus zu verwenden, um Unterordner zu durchsuchen und eine Liste von Dateien zu erstellen, die bestimmte Kriterien erfüllen.
Problem aufgetreten
Ein Benutzer ist auf eine Straßensperre gestoßen beim Versuch, eine Liste bestimmter Dateien in einer rekursiven Unterordnersuche zu erstellen. Das Problem entstand durch die Unterordnervariable, die eine Liste von Unterordnern anstelle des aktuellen Ordners, der die Datei enthält, einzog.
Zweck des Unterordners
Die Unterordnervariable soll enthalten der Name des Unterordners unter dem Hauptordner, in dem sich die gewünschte Datei befindet gefunden.
Lösung
Der Schlüssel zur Lösung dieses Problems liegt in der Nutzung der Variable „root“ oder „dirpath“ anstelle von „subFolder“. Diese Variable enthält den absoluten Pfad zum aktuellen Verzeichnis, das während der Rekursion durchlaufen wird. Durch die Einbeziehung dieses Pfads in die Konstruktion des Dateinamenpfads kann die gewünschte Genauigkeit erreicht werden.
import os
result = [os.path.join(dp, f) for dp, dn, filenames in os.walk(PATH) for f in filenames if os.path.splitext(f)[1] == '.txt']
Verbesserung des Glob-Moduls
Ein alternativer und effizienter Ansatz besteht darin, das in Python integrierte Glob-Modul zu verwenden. Glob zeichnet sich durch die Auswahl von Dateien anhand ihrer Erweiterungen aus.
import os
from glob import glob
result = [y for x in os.walk(PATH) for y in glob(os.path.join(x[0], '*.txt'))]
Generatorfunktion
Für eine übersichtliche und effiziente Implementierung kann man auch eine Generatorfunktion verwenden.
from itertools import chain
result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))
Python 3.4 Lösung
Wenn Sie mit Python 3.4 oder höher arbeiten, können Sie rglob() des Pathlib-Moduls nutzen function.
from pathlib import Path
result = list(Path(".").rglob("*.[tT][xX][tT]"))
Diese Ansätze bieten effektive Lösungen für die rekursive Suche nach Unterordnern und das Zusammenstellen einer Liste von Dateien, die den gewünschten Kriterien entsprechen, sodass Ihre Dateiabrufaufgaben zum Kinderspiel werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3