De laatste naam opvragen
Vul file_name(path) in: geef het laatste onderdeel als string terug. Het pad hoeft daarvoor niet te bestaan.
Je programma kent losse strings, lijsten en dictionaries, maar die waarden verdwijnen wanneer de uitvoering stopt. Een tekstbestand kan gegevens bewaren die een volgende uitvoering weer leest. Je begint met het verschil tussen het adres van een bestand en wat erin staat.
Een pad beschrijft waar een bestand of map gezocht wordt. Met Path uit de standaardbibliotheek pathlib maak je daarvan een object. Dat object biedt herkenbare eigenschappen en bewerkingen voor paden.
Met Path("routes") / "day.txt" voeg je twee onderdelen samen. Die slash is hier een operator van het Path-object. Je hoeft daardoor niet zelf losse scheidingstekens aan strings te plakken.
Een relatief pad begint vanuit de huidige werkmap. De voorbeelden gebruiken tijdelijke lesbestanden in de afgeschermde werkplek. Die worden per uitvoering opnieuw klaargezet; je hebt daarvoor geen eigen bestanden op je computer nodig.
De eigenschap name geeft het laatste onderdeel als string. De eigenschap suffix geeft de laatste extensie met haar punt. Bij een naam zonder extensie is die waarde een lege string.
Voor deze eigenschappen hoeft het bestand niet te bestaan. Je beschrijft alleen de vorm van het pad. Het eerste voorbeeld laat daarnaast de echte tekst lezen, zodat je naam en inhoud naast elkaar ziet.
We lopen door het park.from pathlib import Path
path = Path("routes") / "day.txt"
print(path.name)
print(path.suffix)
print(path.read_text(encoding="utf-8"), end="")day.txt .txt We lopen door het park.
Een naam met meerdere punten kan verschillende delen hebben. Bij bundel.tar.gz is de laatste extensie .gz. De naam zelf blijft bundel.tar.gz; de extensie opvragen verandert het pad niet.
Een bestand bewaart bytes. Een tekencodering beschrijft hoe die bytes tekst vormen; je kent UTF8 al uit de tekstmodule. Met read_text(encoding="utf-8") kies je die afspraak expliciet.
De methode opent het bestand, leest de tekst en sluit het weer. De retourwaarde is een gewone Python-string. Je kunt daarop later bekende stringbewerkingen toepassen.
Lees eerst de inhoud voordat je haar verandert. Een afsluitende newline of spaties kunnen bij de gegevens horen. strip() gebruiken bij iedere leesactie zou die tekens alvast verwijderen, ook wanneer de aanroeper ze wil behouden.
Een leeg tekstbestand levert een lege string op. Een ontbrekend bestand kan niet worden geopend en geeft FileNotFoundError. Het tweede voorbeeld toont beide werkelijke uitkomsten.
from pathlib import Path
print(repr(Path("empty.txt").read_text(encoding="utf-8")))
try:
Path("missing.txt").read_text(encoding="utf-8")
except FileNotFoundError as error:
print(type(error).__name__)'' FileNotFoundError
Een map kan eveneens bestaan, maar is geen gewoon tekstbestand. Met is_file() vraag je naar een gewoon bestand; bij de gewone ontbrekende paden in deze les krijg je False. Een leeg bestand geeft juist True.
Een eerdere controle biedt geen garantie dat een latere leesactie altijd lukt: de bestandstoestand kan veranderen. In deze oefening laat je een leesfout daarom gewoon doorlopen. Je maakt een ontbrekend bestand niet stilzwijgend aan.
Vul de functies in notes.py in. De ene functie beschrijft een pad, de andere leest of onderzoekt een echt bestand. De meegeleverde notitie kun je bekijken; de lescontrole gebruikt daarnaast verschillende tijdelijke bestanden met verschillende inhouden.
Behoud bij lezen de tekst zoals die in de gebruikte UTF8-lesbestanden met LF-regelovergangen staat. Geef metadata als gewone strings of booleans terug. Geen van de vier hulpmiddelen hoeft een bestand te veranderen.
Vul file_name(path) in: geef het laatste onderdeel als string terug. Het pad hoeft daarvoor niet te bestaan.
Vul suffix_name(path) in: geef de laatste extensie inclusief punt terug, of een lege string als die ontbreekt.
Vul read_note(path) in: lees de volledige UTF8-tekst met behoud van spaties en regels. Wijzig het bestand niet en laat FileNotFoundError voor een ontbrekend bestand doorlopen.
Vul regular_file(path) in: geef een bool die zegt of het pad naar een gewoon bestand verwijst. Een leeg bestand is geldig; een map of ontbrekend pad geeft False. Wijzig niets.
Hierna open je bestanden zelf en kies je bewust tussen lezen, vervangen, toevoegen en nieuw aanmaken.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.