Bestands- en OS-omgeving beheren: 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 effectieve oplossingen. Een elegante manier om paden te hanteren is pathlib, terwijl os de OS-omgeving zelf beheert.

Machine en digitaal samensmelten

pathlib is de ster in padmanipulatie, terwijl os de backstage manager is die belichting, geluid en toegangscontrole regelt. In plaats van één te kiezen, is het aan te raden 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() en splitext() kunnen de code omslachtig 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 heeft pathlib duidelijk 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 veelvuldig in de code voorkomen, 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 toenemend aantal 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 stapelen zich op; door alles met pathlib te doen, wordt de code van het team overzichtelijker.


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 voltooid. pathlib toont hier echt zijn kracht.


5. Waar os echt in uitblinkt: de OS‑omgeving beheren

Hier ligt de balans. pathlib is een pad‑expert, maar os is de module 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 laagniveau‑interface; vaak wordt echter subprocess gebruikt, maar de basis 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 ander domein dan pad‑manipulatie.


5.3 Rechten, gebruikers, werkmap en andere omgevingsaspecten

  • 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‑verwerkingpathlib is leesbaarder en onderhoudsvriendelijker.
  • Omgevingsvariabelen / processen / rechten / OS‑functionaliteitos 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

  • pathlib verhoogt de leesbaarheid en stabiliteit van bestandscode aanzienlijk.
  • os beheert de OS‑omgeving zelf, buiten pad‑manipulatie.
  • De juiste keuze is niet één of de ander, maar een combinatie van pathlib + os.

Kort samengevat: werk met paden en bestanden met pathlib, de OS‑omgeving met os.


Gerelateerde artikelen: