# Bestands- en OS-omgeving beheersen: pathlib vs os > **Serie 02 – Vrijheid met mappen en bestanden in Python** Bij het schrijven van een programma is het vaak nodig om bestanden aan te maken, mappen te verplaatsen en paden te inspecteren. Python biedt hiervoor twee “goede” oplossingen. Een elegante manier om paden te hanteren is **`pathlib`**, terwijl **`os`** het OS-omgeving zelf beheert. ![Machine en digitaal samensmelten](/media/editor_temp/6/dde8bc58-b467-4fe2-9370-24899d41a7bd.png) `pathlib` is de ster van padmanipulatie, terwijl `os` de backstage manager is die belichting, geluid en toegangscontrole regelt. In plaats van één te kiezen, is het schoon om ze samen te gebruiken. --- ## 1. os en pathlib, wat is het verschil? {#sec-92641994f71a} Met de introductie van `pathlib` in Python 3.4 is de manier waarop paden worden verwerkt aanzienlijk verbeterd. * **`os` / `os.path`** * Werkt met paden als **strings**. * Functies zoals `os.path.join()`, `basename()` en `splitext()` kunnen de code lang maken. * Behandelt echter ook OS-functies (omgevingsvariabelen, processen, rechten, etc.). * **`pathlib`** * Werkt met paden als **objecten (Path)**. * Dankzij de `/` operator en method chaining is de code korter en intuïtiever. * Voor “pad‑taken” zoals zoeken en extensie‑verwerking is `pathlib` duidelijk de voorkeur. --- ## 2. Codevergelijking per taak {#sec-273fe3d2efe4} ### 2.1 Huidige werkmap controleren en map aanmaken {#sec-707744fc63d4} ```python import os from pathlib import Path # os‑methode current_os = os.getcwd() if not os.path.exists("test_os"): os.makedirs("test_os") # pathlib‑methode current_pl = Path.cwd() Path("test_pl").mkdir(exist_ok=True) ``` Tip: Als paden veel zichtbaar zijn in de code, is `pathlib` beter voor onderhoud. --- ### 2.2 Paden samenvoegen (het grootste verschil) {#sec-55f0047ba895} ```python import os from pathlib import Path # os‑methode path_os = os.path.join("usr", "bin", "python") # pathlib‑methode (slash‑operator) path_pl = Path("usr") / "bin" / "python" ``` Bij een toenemende hoeveelheid samenvoegingen wordt `pathlib` leesbaarder. --- ## 3. Waarom pathlib wordt aanbevolen: de kracht van “pad‑objecten” {#sec-a7e299456c6e} De voordelen van `pathlib` eindigen niet bij samenvoegen. Bij het ophalen van bestandsinformatie wordt het verschil nog duidelijker. | Functie | `os.path` | `pathlib` | |---|---|---| | Bestandnaam | `os.path.basename(p)` | `p.name` | | Naam zonder extensie | `os.path.splitext(os.path.basename(p))[0]` | `p.stem` | | Extensie | `os.path.splitext(p)[1]` | `p.suffix` | | Ouder‑map | `os.path.dirname(p)` | `p.parent` | Deze kleine, maar frequente pad‑operaties accumuleren; door alles met `pathlib` te doen, wordt de code van het team duidelijker. --- ## 4. Praktijkvoorbeeld: alleen bestanden met een bepaalde extensie zoeken {#sec-1313166407f5} We zoeken binnen een projectmap naar alle `.txt`‑bestanden. ```python from pathlib import Path base_path = Path.cwd() txt_files = list(base_path.rglob("*.txt")) # recursief zoeken inclusief submappen for file in txt_files: print(f"Bestand: {file.name}, Absoluut pad: {file.resolve()}") ``` Met één `rglob()` is recursief zoeken compleet. `pathlib` is hier echt krachtig. --- ## 5. Waar os echt sterk is: het OS‑omgeving beheren {#sec-42d7841b5743} Dit is het evenwichtspunt. **`pathlib`** is een pad‑expert, maar **`os`** is de acteur die het OS zelf aanstuurt. ### 5.1 Omgevingsvariabelen lezen/schrijven (kern voor deployment, beveiliging, configuratie) {#sec-bc07d2294385} In verschillende ontwikkel‑ en productie‑omgevingen worden instellingen vaak via omgevingsvariabelen gescheiden van bestanden. ```python import os # lezen db_url = os.environ.get("DATABASE_URL", "sqlite:///local.db") # schrijven (meestal alleen voor de huidige proces) os.environ["APP_ENV"] = "production" ``` Voor API‑sleutels, modus, log‑niveau of feature‑flags is `os` de juiste plek. --- ### 5.2 Processen/commando’s uitvoeren: “OS laten werken” {#sec-be8e97bf9b7c} Het uitvoeren van externe commando’s of het beheren van processen valt onder OS‑functionaliteit. `os` biedt een laag‑niveau interface; vaak wordt echter `subprocess` gebruikt, maar het uitgangspunt blijft OS‑beheer. ```python import os # eenvoudige uitvoering (retourneert exit‑code) exit_code = os.system("echo hello") print(exit_code) ``` Andere functies voor gedetailleerde proces‑controle (starten, vervangen, fork) behoren ook tot `os`. Dit is een compleet andere domein dan pad‑manipulatie. --- ### 5.3 Rechten, gebruikers, werkmap en andere “omgeving” aspecten {#sec-3b5ac9f93cf3} * Rechten wijzigen (Unix‑achtig): `os.chmod()` * Werkmap wijzigen: `os.chdir()` * Proces‑/gebruikersinformatie: `os.getpid()` etc. Deze functies kunnen niet door `pathlib` worden vervangen. Hier is `os` de enige optie. --- ## 6. Conclusie: de rollen van pathlib en os verdelen {#sec-a1f526df17df} * **Pad‑manipulatie / bestandsverkenning / bestandsnaam‑verwerking** → `pathlib` is leesbaarder en onderhoudsvriendelijker. * **Omgevingsvariabelen / processen / rechten / OS‑functionaliteit** → `os` is de unieke domein. De beste aanpak is simpel: * “Alles wat een pad betreft, gebruik `Path`.” * “Wanneer je met het OS moet communiceren, gebruik `os`.” --- ## 7. Samenvatting {#sec-94950e4d35ef} * `pathlib` verhoogt de leesbaarheid en stabiliteit van bestands‑code aanzienlijk. * `os` beheert het OS‑omgeving zelf, buiten pad‑manipulatie. * De juiste keuze is niet één of de ander, maar een combinatie van **`pathlib + os`**. **Kort samengevat**: pad‑ en bestandswerk met `pathlib`, OS‑omgeving met `os`. --- **Gerelateerde artikelen**: - [[Python standaardbibliotheek - 0] Wat is de Python standaardbibliotheek? Een gids voor beginners](/ko/whitedec/2026/1/29/python-standard-library/) - [Python standaardbibliotheek beheersen 3 - pathlib](/ko/whitedec/2025/5/8/python-standard-library-pathlib/)