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 sowie das Modul os, das die Betriebssystem-Umgebung selbst steuert.

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 ein Modul zu verwerfen, ist es sinnvoller, beide je nach Aufgabe einzusetzen.


1. os und pathlib – Worin unterscheiden sie 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, die Dateisuche und den Umgang mit Dateierweiterungen 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 häufig verwendet oder manipuliert werden, 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 beschränkt sich nicht nur auf die Kombination von Pfaden. Sobald man Dateiinformationen abruft, wird der Unterschied noch 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() lässt sich die rekursive Suche in einem Schritt erledigen. 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 verwaltet.

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, da es speziell für die Ausführung von Befehlen konzipiert wurde.

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: