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.

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
pathlibdie 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‑Verarbeitung →
pathlibist 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,
osbenutzen“
7. Zusammenfassung
pathliberhöht die Lesbarkeit und Zuverlässigkeit von Dateisystem‑Code erheblich.ossteuert 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:
Es sind keine Kommentare vorhanden.