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.

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?
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()ensplitext()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
pathlibduidelijk de voorkeur.
2. Codevergelijking per taak
2.1 Huidige werkmap controleren en map aanmaken
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)
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”
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
We zoeken binnen een projectmap naar alle .txt‑bestanden.
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
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)
In verschillende ontwikkel‑ en productie‑omgevingen worden instellingen vaak via omgevingsvariabelen gescheiden van bestanden.
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”
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.
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
- 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
- Pad‑manipulatie / bestandsverkenning / bestandsnaam‑verwerking →
pathlibis leesbaarder en onderhoudsvriendelijker. - Omgevingsvariabelen / processen / rechten / OS‑functionaliteit →
osis 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
pathlibverhoogt de leesbaarheid en stabiliteit van bestands‑code aanzienlijk.osbeheert 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: