Dateisystem & OS-Umgebung meistern: pathlib vs os

Serie 02 – Mit Python Ordner und Dateien frei handhaben

Beim Erstellen von Programmen ist es unvermeidlich, Dateien zu erzeugen, Ordner zu verschieben und Pfade zu prüfen. Python bietet dafür zwei „richtige“ Lösungen. Der elegante Pfad‑Manipulator pathlib und das Modul, das die Betriebssystem‑Umgebung selbst steuert, os.

Maschine und Digitales

pathlib ist der Star der Pfad‑Manipulation, während os im Hintergrund die Beleuchtung, das Sound‑System und die Türen regelt – ein Bühnenmanager. Statt eines Moduls zu verwerfen, ist es sauberer, beide je nach Aufgabe einzusetzen.


1. os und pathlib – Was unterscheidet sich?

Seit Python 3.4 hat pathlib die Art und Weise, wie Pfade gehandhabt werden, deutlich verbessert.

  • os / os.path
  • Pfade werden als Strings behandelt.
  • Funktionaler Stil führt zu vielen Aufrufen wie os.path.join(), basename(), splitext().
  • Deckt jedoch auch OS‑Funktionen (Umgebungsvariablen, Prozesse, Berechtigungen) ab.

  • pathlib

  • Pfade werden als Objekte (Path) verwaltet.
  • Durch Operator‑Überladung (/) und Methodenketten wird der Code kürzer und intuitiver.
  • Für Pfad‑Operationen, Dateisuche und Erweiterungs‑Handling ist pathlib die bessere Wahl.

2. Code‑Vergleich für typische Aufgaben

2.1 Aktuelles Arbeitsverzeichnis prüfen und Ordner erstellen

import os
from pathlib import Path

# os‑Ansatz
current_os = os.getcwd()
if not os.path.exists("test_os"):
    os.makedirs("test_os")

# pathlib‑Ansatz
current_pl = Path.cwd()
Path("test_pl").mkdir(exist_ok=True)

Tipp: Wenn Pfade stark sichtbar sind, ist pathlib wartungsfreundlicher.


2.2 Pfade zusammenführen (der größte Unterschied)

import os
from pathlib import Path

# os‑Ansatz
path_os = os.path.join("usr", "bin", "python")

# pathlib‑Ansatz (Slash‑Operator)
path_pl = Path("usr") / "bin" / "python"

Je mehr Pfade kombiniert werden, desto lesbarer ist pathlib.


3. Warum pathlib empfohlen wird: Die Kraft des „Pfad‑Objekts“

pathlib endet nicht bei der Kombination. Sobald man Dateiinformationen abruft, wird der Unterschied deutlicher.

Funktion os.path pathlib
Dateiname extrahieren os.path.basename(p) p.name
Name ohne Erweiterung os.path.splitext(os.path.basename(p))[0] p.stem
Erweiterung prüfen os.path.splitext(p)[1] p.suffix
Eltern‑Verzeichnis os.path.dirname(p) p.parent

Diese kleinen Pfad‑Operationen summieren sich; ein einheitlicher Einsatz von pathlib macht den Code deutlich sauberer.


4. Praxisbeispiel: Alle Dateien mit einer bestimmten Erweiterung finden

Wir suchen im Projektordner nach allen .txt‑Dateien.

from pathlib import Path

base_path = Path.cwd()
txt_files = list(base_path.rglob("*.txt"))  # rekursive Suche inklusive Unterordner

for file in txt_files:
    print(f"Dateiname: {file.name}, Absolutpfad: {file.resolve()}")

Mit rglob() erledigt die rekursive Suche in einem Schritt. Für das Finden von Dateien ist pathlib wirklich stark.


5. Wo os wirklich stark ist: Die Kontrolle über die Betriebssystem‑Umgebung

Hier beginnt das Gleichgewicht. pathlib ist ein Pfad‑Experte, os ist der Manager der Betriebssystem‑Umgebung.

5.1 Umgebungsvariablen lesen/schreiben (Deployment, Sicherheit, Konfiguration)

In unterschiedlichen Entwicklungs‑ und Produktionsumgebungen werden Einstellungen häufig als Umgebungsvariablen getrennt.

import os

# Lesen
db_url = os.environ.get("DATABASE_URL", "sqlite:///local.db")

# Schreiben (typischerweise nur für den aktuellen Prozess)
os.environ["APP_ENV"] = "production"

Beispiele: API‑Keys, Betriebsmodus, Log‑Level, Feature‑Flags – alles im Bereich von os, nicht von pathlib.


5.2 Prozesse/Kommandos ausführen: „OS beauftragen“

Das Ausführen externer Befehle oder das Verwalten von Prozessen gehört zum OS‑Bereich. os bietet die Low‑Level‑Schnittstelle, während subprocess häufig verwendet wird, weil es speziell für Befehle gedacht ist.

import os

# Einfaches Ausführen (Rückgabewert ist Exit‑Code)
exit_code = os.system("echo hello")
print(exit_code)

Weitere Funktionen für detaillierte Prozesssteuerung (Starten, Ersetzen, Forken) liegen ebenfalls bei os. Das ist ein völlig anderer Bereich als die Pfad‑Manipulation von pathlib.


5.3 Berechtigungen, Benutzer, Arbeitsverzeichnis – die „Umgebung“ selbst

  • Berechtigungen ändern (Unix‑ähnlich): os.chmod()
  • Arbeitsverzeichnis wechseln: os.chdir()
  • Prozess‑/Benutzer‑Informationen: os.getpid() usw.

Diese Funktionen können von pathlib nicht ersetzt werden. Hier ist os unverzichtbar.


6. Fazit: Rollenverteilung zwischen pathlib und os

  • Pfad‑Manipulation / Dateisuche / Dateiname‑Verarbeitungpathlib ist lesbarer und wartungsfreundlicher.
  • Umgebungsvariablen / Prozesse / Berechtigungen / OS‑Funktionen → ausschließlich os.

Der optimale Ansatz lautet:

  • „Pfad‑Operationen immer mit Path
  • „Wenn mit dem Betriebssystem kommuniziert werden muss, os benutzen“

7. Zusammenfassung

  • pathlib erhöht die Lesbarkeit und Zuverlässigkeit von Dateisystem‑Code erheblich.
  • os steuert die Betriebssystem‑Umgebung, die über Pfade hinausgeht.
  • Die richtige Lösung ist nicht „entweder oder“, sondern die Kombination pathlib + os.

Kurz gesagt: Pfad‑ und Dateiverarbeitung mit pathlib, OS‑Umgebung mit os.


Verwandte Artikel: