Start mit pathlib — Objektorientierte Pfadbearbeitung

Wenn man mit Python arbeitet, ist es sehr häufig, sich mit Dateipfaden oder Verzeichnissen zu beschäftigen. Ob beim Speichern von Logs, Lesen und Schreiben von Konfigurationsdateien oder Organisieren von Datendateien – all das sind alltägliche Aufgaben. Früher musste man hierfür Module wie os.path, glob oder shutil durcheinander verwenden, aber das ist jetzt nicht mehr nötig. Warum?

Weil es pathlib gibt.

Was ist pathlib?

pathlib ist ein objektorientiertes Modul zur Pfadbearbeitung, das seit Python 3.4 verfügbar ist. Während man zuvor Dateipfade einfach als Strings behandelt hat, betrachtet pathlib "den Pfad selbst" als ein Objekt. Dadurch wird das Verbinden von Pfaden, das Überprüfen ihrer Existenz und das Lesen und Schreiben von Dateien viel klarer und lesbarer.

from pathlib import Path

▶ Diese Path-Klasse funktioniert automatisch je nach Betriebssystem als PosixPath (macOS/Linux) oder WindowsPath. Das bedeutet, dass Sie sich keine Gedanken über das verwendete Betriebssystem machen müssen!


Wichtige Funktionen von pathlib mit Beispielen

1. Erzeugen eines Pfad-Objekts

p = Path('data/example.txt')
print(p.resolve())  # Gibt den absoluten Pfad zurück

Es sieht aus wie ein String, ist aber ein Objekt. Sie können den Pfad flexibel durch verschiedene Methoden und Eigenschaften bearbeiten.

2. Pfadkombination: Nutzung des /-Operators

data_dir = Path('data')
file_path = data_dir / 'sample.txt'

Es ist sehr pythonisch, dass man Pfade mit dem Slash-Operator / verbinden kann. Das erhöht die Lesbarkeit und Zuverlässigkeit gegenüber der String-Verkettung.

3. Extrahieren von Pfadinformationen

Es ist sehr praktisch, dass man Pfadkomponenten wie das übergeordnete Verzeichnis, den Namen und die Erweiterung trennen kann.

p = Path('data/sample.txt')
print(p.parent)   # data
print(p.name)     # sample.txt
print(p.stem)     # sample
print(p.suffix)   # .txt

4. Überprüfen der Existenz

Gibt das Ergebnis als Boolean zurück.

p.exists()     # Existiert?
p.is_file()    # Ist es eine Datei?
p.is_dir()     # Ist es ein Verzeichnis?

5. Erstellen von Verzeichnissen

p = Path('logs/2025/05')
p.mkdir(parents=True, exist_ok=True)

Es ist möglich, verschachtelte Verzeichnisse auf einmal zu erstellen, und es wird kein Fehler ausgelöst, wenn sie bereits existieren.

6. Lesen und Schreiben von Dateien

p = Path('output.txt')
p.write_text("Hello, World!")

text = p.read_text()
print(text)

Sie können auch mit Binärdateien arbeiten:

p.write_bytes(b'binary data')
data = p.read_bytes()

7. Dateisystem durchsuchen

print(list(Path('.').glob('*.py')))      # Liste der .py-Dateien im aktuellen Ordner
print(list(Path('.').rglob('*.py')))     # Rekursive Suche in Unterverzeichnissen

glob() gibt einen Generator zurück, daher ist es ratsam, ihn in eine Liste zu verwandeln, um die Ergebnisse zu überprüfen.

8. Dateien löschen, verschieben, umbenennen

p.unlink()           # Löschen
p.rename('newname')  # Umbenennen (innerhalb desselben Verzeichnisses)
p.replace('newpath') # Verschieben und überschreiben

rename() kann fehlschlagen, wenn der Zielpfad existiert, daher sollten Sie replace() verwenden, wenn Sie überschreiben möchten. Für Kopierarbeiten sollten Sie shutil.copy() verwenden.


Vergleich: os.path vs pathlib

# os.path
import os
os.path.exists('foo/bar.txt')

# pathlib
Path('foo/bar.txt').exists()
  • Der Code ist viel lesbarer und verständlicher.
  • Besonders in Linux-Umgebungen ähnelt es der Syntax von häufig verwendeten Befehlen wie cd, ls, mkdir, was es vertraut macht.

Warum sollte man pathlib verwenden?

  • Der Code wird strukturell durch die Verwendung von Path-Objekten anstelle von Strings.
  • Betriebssystemunabhängige Pfadbearbeitung (Windows vs POSIX)
  • Integration der Funktionen von os.path, glob, shutil
  • Verbesserte Wartbarkeit auch bei Testcode, Logging und Fehlerbehandlung

Tux der Dateipfad-Blöcke in einem Python T-Shirt zusammenstellt

Abschließend

So wie Counter und defaultdict die Arbeit mit Sammlungen eleganter gemacht haben, wird pathlib die Art und Weise, wie wir mit Dateipfaden umgehen, völlig verändern. Die alten Zeiten, in denen wir uns mit Stringverarbeitung herumschlagen mussten, können wir nun vergessen. Probieren Sie die in diesem Artikel gezeigten Beispiele selbst aus. Sie werden viel schneller damit vertraut werden, als Sie denken.

Im nächsten Teil planen wir, die fortgeschrittene Verwendung von shutil zu behandeln, um tatsächliches Kopieren/Backup von Dateien zu automatisieren. Bleiben Sie gespannt!

Wenn Sie neugierig auf den vorherigen Artikel sind, klicken Sie bitte auf den untenstehenden Link, um ihn zu sehen.

Python Standardbibliothek 1 - collections.Counter

Python Standardbibliothek 2 - collections.defaultdict