Bestandspaden op verschillende operating-systemen
Op deze pagina:
Windows springt anders om met bestandspaden als andere operatingsystemen. Windows gebruikt backward slashes ipv forward slashes tussen directories in bestandspaden. De backward slash wordt o.a. in Python ook gebruikt als escape-teken. De eenvoudigste oplossing is om ook voor Windows bestandslocaties forward slashes te gebruiken in Python. Dankzij de pathlib bibliotheek is dit geen enkel probleem.
from pathlib import Path
# Path past de slashes aan aan het gebruikte operatingsyteem:
data_map = Path("mijn_data/teksten/")
# het pad verlengen kan gewoon met de forward slash:
te_openen_bestand = data_map / "mijn_data.txt"
# tekstbestand openen en meteen lezen:
print(te_openen_bestand.read_text())
De bestandsnaam geheel of gedeeltelijk opvragen
Bestandsnamen bestaan uit 2 gedeelten, de eigenlijke naam en de extensie die aangeeft om wat voor soort bestand het gaat.
from pathlib import Path
bestand = Path("mijn_data/teksten/mijn_data.txt")
# de volle naam:
print(bestand.name)
# geeft "mijn_data.txt"
# de extensie:
print(bestand.suffix)
# geeft "txt"
# de eigenlijke naam:
print(bestand.stem)
# geeft "mijn_data"
Controleren of een bestand bestaat
Als een bestand niet bestaat geeft dat een foutmelding, die wil je meestal vermijden.
from pathlib import Path
if not bestand.exists():
print("Dit bestand bestaat nog niet!")
else:
print("Dit bestand bestaat al!")
De huidige directory opvragen
Als je wilt weten in welke directory je nu bent, dat hoeft niet de directory te zijn waar je Python script staat, dan kan je deze opvragen met:
import os
print(os.getcwd())
De directory waar je Python script staat kun je opvragen, bijvoorbeeld om andere bestanden te openen die in dezelfde directory staan, met:
from pathlib import Path
script_directory = Path(__file__).absolute().parent
De variabele dubbele underscore file dubbele underscore bevat het relatieve pad en bestandsnaam van het script dat wordt uitgevoerd, absolute maakt daar een absoluut pad van en parent geeft de directory zonder de bestandsnaam.