# 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](/media/editor_temp/6/dde8bc58-b467-4fe2-9370-24899d41a7bd.png) `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? {#sec-92641994f71a} 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 {#sec-273fe3d2efe4} ### 2.1 Aktuelles Arbeitsverzeichnis prüfen und Ordner erstellen {#sec-707744fc63d4} ```python 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) {#sec-55f0047ba895} ```python 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“ {#sec-a7e299456c6e} `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 {#sec-1313166407f5} Wir suchen im Projektordner nach allen `.txt`‑Dateien. ```python 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 {#sec-42d7841b5743} Hier beginnt das Gleichgewicht. **`pathlib`** ist ein Pfad‑Experte, **`os`** ist der Manager der Betriebssystem‑Umgebung. ### 5.1 Umgebungsvariablen lesen/schreiben (Deployment, Sicherheit, Konfiguration) {#sec-bc07d2294385} In unterschiedlichen Entwicklungs- und Produktionsumgebungen werden Einstellungen häufig als **Umgebungsvariablen** verwaltet. ```python 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“ {#sec-be8e97bf9b7c} 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. ```python 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 {#sec-3b5ac9f93cf3} * 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 {#sec-a1f526df17df} * **Pfad‑Manipulation / Dateisuche / Dateiname‑Verarbeitung** → `pathlib` 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 {#sec-94950e4d35ef} * `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**: - [[Python Standardbibliothek - 0] Was ist die Python Standardbibliothek? Ein Leitfaden für Anfänger](/ko/whitedec/2026/1/29/python-standard-library/) - [Python Standardbibliothek meistern 3 – pathlib](/ko/whitedec/2025/5/8/python-standard-library-pathlib/)