Je zou een lijstje kunnen maken met al je boodschappen achter elkaar, maar ik vermoed dat de meeste wel een lijstje in de tweede vorm gemaakt hebben met alle boodschappen onder elkaar.
Je hebt dan telkens een item ingetypt en op ENTER gedrukt om een nieuwe lijn te starten.
Telkens je op ENTER drukt wordt er een niet-afdrukbaar teken geplaatst, het “end-of-line” karakter. Dit teken sluit een regel af. We kunnen hiervan gebruik maken om het boodschappenlijstje regel per regel te lezen, en zo opnieuw een lijst te vullen.
We starten men een lege lijst met de naam “boodschappen” te maken. Deze lijst zal worden gebruikt om de regels uit het bestand op te slaan.
boodschappen=[]
We openen het bestand "boodschappen.txt", en een bestandsobject fp wordt aangemaakt om toegang te krijgen tot de inhoud van het bestand.
We geven met de parameter “r” aan dat we het bestand gaan lezen (read).
fp = open( "boodschappen.txt","r" )
We gaan de eerste lijn van het bestand lezen en deze opslaan in een variabele buffer.
buffer = fp.readline()
Nu beginnen we een while-lus. Zolang de variabele buffer niet leeg is (wat betekent dat er nog regels in het bestand zijn om te lezen), zal de code van de while-lus uitgevoerd worden.
while buffer!="":
Binnen de lus wordt de huidige regel toegevoegd aan de lijst boodschappen door deze te concatenen met de bestaande lijst. Dit betekent dat elke regel wordt toegevoegd aan de lijst als een nieuw element.
boodschappen=boodschappen+[buffer]
Vervolgens moeten we de volgende regel uit het bestand lezen en opslaan in de variabele buffer.
buffer = fp.readline()
Deze stappen van de lus blijven herhaald worden tot er geen regels meer in het bestand staan om te lezen.
Nadat alle regels in het bestand zijn gelezen en toegevoegd aan de lijst boodschappen, moeten we het bestand sluiten met fp.close(). Dit zorgt ervoor dat het bestand netjes wordt afgesloten en geen verdere toegang meer heeft.
fp.close()
Tenslotten gaan we onze lijst afdrukken om het resultaat te kunnen beoordelen.
print(boodschappen)
Wanneer we deze code gaan uitvoeren dan krijgen we onderstaan resultaat.
Je merkt dat bijna alle items in de lijst eindigen met \n. Dit is de voorstelling van het end-of-line karakter.
Het kan zijn dat bij je laatste item uit de lijst je dit niet ziet, dan heb je nadat je het laatste item hebt toegevoegd aan je lijst niet op ENTER gedrukt.
In onze lijst willen we dit teken niet, daarom gaan we dit teken er af slicen.
Hoewel wij dit zien als 2 tekens, gaat het over 1 teken, het end-of-line karakter. De slicing zal dus als volgt uitgevoerd worden:
buffer=buffer[:-1]
Omdat niet alle elementen in de lijst dit teken bevat, moeten controleren of dit teken aanwezig is. De conditie hiervoor is:
if '\n' in buffer:
Onze volledige code gaat er dan als volgt uitzien:
fp = open( "boodschappen.txt","r" )
buffer = fp.readline()
while buffer!="":
buffer=str(buffer)
if '\n' in buffer:
buffer=buffer[:-1]
boodschappen=boodschappen+[buffer]
buffer = fp.readline()
fp.close()
print(boodschappen)
Opdracht 6.3
Pas je bestand boodschappen.txt en de code aan zodat niet enkel ingelezen wordt wat je moet kopen, maar ook hoeveel.
Opdracht 6.4
Pas het woordraapspel (oefening 5.1) zo aan dat het script de geheime woorden inleest van een tekstbestand.