Python File Handling

Effizientes Finden von Dateien nach Erweiterung in Python

Spread the love

Das Auffinden von Dateien mit spezifischen Endungen ist eine gängige Aufgabe bei der Dateiverarbeitung in Python. Dieser Artikel untersucht verschiedene effiziente und vielseitige Methoden, um dies zu erreichen, und richtet sich an unterschiedliche Bedürfnisse und Codierungsstile. Wir behandeln verschiedene Python-Module und -Techniken, sodass Sie den optimalen Ansatz für Ihren spezifischen Anwendungsfall auswählen können.

Inhaltsverzeichnis

  1. Verwendung des glob-Moduls
  2. Nutzung des os-Moduls
  3. Einsatz von pathlib für die Suche in einzelnen Verzeichnissen
  4. Rekursive Suche mit os.walk
  5. Rekursive Suche mit pathlib.rglob

1. Verwendung des glob-Moduls

Das glob-Modul bietet eine prägnante Möglichkeit, Dateien zu finden, die einem definierten Muster innerhalb eines einzelnen Verzeichnisses entsprechen. Seine glob()-Funktion gibt eine Liste von Pfaden zurück, die das Muster erfüllen.


import glob

def find_files_with_extension_glob(directory, extension):
  """Findet Dateien mit einer gegebenen Endung mithilfe von glob.glob()."""
  return glob.glob(f"{directory}/*{extension}")

# Beispiel:
files = find_files_with_extension_glob("./my_directory", ".txt")
print(files)

2. Nutzung des os-Moduls

Das os-Modul bietet eine granularere Steuerung. os.listdir() listet alle Einträge in einem Verzeichnis auf und ermöglicht eine benutzerdefinierte Filterung.


import os

def find_files_with_extension_os(directory, extension):
  """Findet Dateien mit einer gegebenen Endung mithilfe von os.listdir()."""
  files = []
  for filename in os.listdir(directory):
    if filename.endswith(extension):
      files.append(os.path.join(directory, filename))
  return files

# Beispiel:
files = find_files_with_extension_os("./my_directory", ".txt")
print(files)

3. Einsatz von pathlib für die Suche in einzelnen Verzeichnissen

Das pathlib-Modul bietet einen objektorientierten Ansatz. Seine glob()-Methode bietet eine sauberere Syntax als glob.glob().


from pathlib import Path

def find_files_with_extension_pathlib(directory, extension):
  """Findet Dateien mit einer gegebenen Endung mithilfe von pathlib.glob()."""
  return list(Path(directory).glob(f"*{extension}"))

# Beispiel:
files = find_files_with_extension_pathlib("./my_directory", ".txt")
print(files)

4. Rekursive Suche mit os.walk

Für die Suche in Unterverzeichnissen durchläuft os.walk() die Verzeichnisstruktur und ermöglicht die Überprüfung jeder Datei auf die gewünschte Endung.


import os

def find_files_recursive_os(directory, extension):
    """Findet rekursiv Dateien mit einer gegebenen Endung mithilfe von os.walk()."""
    files = []
    for root, _, filenames in os.walk(directory):
        for filename in filenames:
            if filename.endswith(extension):
                files.append(os.path.join(root, filename))
    return files

# Beispiel:
files = find_files_recursive_os("./my_directory", ".txt")
print(files)

5. Rekursive Suche mit pathlib.rglob

Die rglob()-Methode von pathlib bietet die eleganteste Lösung für rekursive Suchen.


from pathlib import Path

def find_files_recursive_pathlib(directory, extension):
  """Findet rekursiv Dateien mit einer gegebenen Endung mithilfe von pathlib.rglob()."""
  return list(Path(directory).rglob(f"*{extension}"))

# Beispiel:
files = find_files_recursive_pathlib("./my_directory", ".txt")
print(files)

Denken Sie daran, einen Ordner „my_directory“ mit einigen .txt-Dateien zu erstellen, damit die Beispiele korrekt funktionieren. Wählen Sie die Methode, die am besten zu Ihrem Codierungsstil und den Anforderungen Ihres Projekts passt. Für einfache Suchen in einzelnen Verzeichnissen sind glob oder pathlib.glob() eine ausgezeichnete Wahl. Für rekursive Suchen bietet pathlib.rglob() die prägnanteste und lesbarste Lösung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert