pathlib Starten — Objectgeoriënteerde Padverwerking
Wanneer je met Python werkt, kom je vaak in de situatie dat je met bestandspaden of mappen moet werken. Dit zijn alledaagse taken zoals het opslaan van logs, het lezen en schrijven van configuratiebestanden, of het organiseren van datafiles. Vroeger werden deze taken gemengd behandeld met modules zoals os.path
, glob
, en shutil
, maar daar is nu geen behoefte meer aan. Waarom?
Omdat er pathlib
is!
Wat is pathlib?
pathlib
is een objectgeoriënteerde module speciaal voor padverwerking, geïntroduceerd in Python 3.4. Waar je vroeger bestandspaden als simpele strings behandelde, behandelt pathlib
de “pad zelf” als een object. Dit maakt het mogelijk om paden te verbinden, de aanwezigheid te controleren, en bestanden te lezen en te schrijven met een veel duidelijkere en leesbaardere syntaxis.
from pathlib import Path
▶ Deze Path
klasse werkt automatisch als PosixPath
(macOS/Linux) of WindowsPath
, afhankelijk van jouw besturingssysteem. Je hoeft je geen zorgen te maken over welk OS je gebruikt!
Essentiële functies en voorbeelden van pathlib
1. Padobject maken
p = Path('data/example.txt')
print(p.resolve()) # Retourneert het absolute pad
Het lijkt misschien een string, maar dit is een object. Je kunt paden op een flexibele manier beheren met verschillende methodes en eigenschappen.
2. Paden combineren: gebruik de /
operator
data_dir = Path('data')
file_path = data_dir / 'sample.txt'
Het is zeer Pythonisch dat je paden kunt verbinden met de slash-operator /
. Dit is veiliger en leesbaarder dan string concatenatie.
3. Informatie uit paden extraheren
Het is ook zeer handig dat je de componenten van het pad, zoals de bovenliggende map, naam en extensie, kunt scheiden.
p = Path('data/sample.txt')
print(p.parent) # data
print(p.name) # sample.txt
print(p.stem) # sample
print(p.suffix) # .txt
4. Controleren op bestaan
Geeft een boolean terug.
p.exists() # Bestaat het?
p.is_file() # Is het een bestand?
p.is_dir() # Is het een map?
5. Mappen maken
p = Path('logs/2025/05')
p.mkdir(parents=True, exist_ok=True)
Je kunt geneste mappen in één keer maken, en als ze al bestaan, gebeurt er geen fout.
6. Bestanden lezen en schrijven
p = Path('output.txt')
p.write_text("Hello, World!")
text = p.read_text()
print(text)
Je kunt ook met binaire bestanden omgaan:
p.write_bytes(b'binary data')
data = p.read_bytes()
7. Bestanden/mappen zoeken
print(list(Path('.').glob('*.py'))) # Lijst van .py bestanden in de huidige map
print(list(Path('.').rglob('*.py'))) # Recursieve zoekopdracht in submappen
glob()
retourneert een generator, dus het is het beste om het te converteren naar een lijst voor controle.
8. Bestanden verwijderen, verplaatsen, of hernoemen
p.unlink() # Verwijderen
p.rename('newname') # Hernoemen (binnen dezelfde map)
p.replace('newpath') # Verplaatsen en overschrijven
rename()
kan falen als het doelpad al bestaat, dus gebruikreplace()
als je wilt overschrijven. Voor kopiëren moet jeshutil.copy()
gebruiken.
Vergelijking os.path vs pathlib
# os.path
import os
os.path.exists('foo/bar.txt')
# pathlib
Path('foo/bar.txt').exists()
- De code is veel leesbaarder en overzichtelijker.
- Bijzonder vertrouwd vanwege de syntax die lijkt op
cd
,ls
,mkdir
, wat vaak in Linux omgevingen wordt gebruikt.
Waarom pathlib gebruiken?
- De code wordt structureel door Path objecten in plaats van strings.
- Besturingssysteem onafhankelijke padverwerking (Windows vs POSIX)
- Functionaliteit van
os.path
,glob
, enshutil
samengevoegd - Verbeterde onderhoudbaarheid in testcode, logging, foutafhandeling, enz.
Slotwoord
Net zoals Counter
en defaultdict
de omgang met collecties eleganter maakte, zo verandert pathlib
de manier waarop we met bestandspaden omgaan volledig. Vergeet de moeilijke tijden van stringverwerking. Probeer de voorbeelden in dit artikel één voor één zelf uit te voeren. Je zult merken dat het veel sneller handiger wordt.
In het volgende deel ga ik geavanceerde toepassingen van shutil
behandelen voor het automatiseren van bestandskopieën/back-ups. Verwacht het!
Als je nieuwsgierig bent naar het vorige artikel, kun je het onderaan dit bericht via de links bekijken.
댓글이 없습니다.