Ga naar hoofdinhoud

14a Een tekstbestand schrijven

Alles wat je programma in variabelen bewaart, is weg zodra het stopt. Wil je iets bewaren tot de volgende keer, dan schrijf je het in een bestand:

with open("boodschappen.txt", "w") as bestand:
bestand.write("melk\n")
bestand.write("brood\n")
bestand.write("kaas\n")

print("Opgeslagen.")

Uitvoer:

Opgeslagen.

In boodschappen.txt staat nu:

melk
brood
kaas

Wat er gebeurt​

  • open("boodschappen.txt", "w") opent het bestand. De "w" staat voor write, schrijven. Bestaat het bestand nog niet, dan maakt Python het aan.
  • with … as bestand: geeft het open bestand de naam bestand.
  • bestand.write() schrijft tekst in het bestand, precies wat je meegeeft.

Zodra het ingesprongen blok onder with klaar is, sluit Python het bestand. Dat sluiten doet ertoe: Python bewaart wat je schrijft soms eerst even, en zet het pas bij het sluiten echt in het bestand. Met with kun je dat niet vergeten.

write werkt anders dan print. Die begint na elke regel zelf aan een nieuwe; write niet. Daarom staat achter elke boodschap \n: dat is het teken voor een nieuwe regel.

Waar staat het bestand?

Op je eigen computer komt boodschappen.txt in dezelfde map als je Python-bestand, en daar blijft het staan. Hier in de browser bestaat het bestand tot je de pagina herlaadt: daarna is het weg.

"w" begint opnieuw​

Open je een bestand dat al bestaat met "w", dan gooit Python de oude inhoud weg:

with open("boodschappen.txt", "w") as bestand:
bestand.write("melk\n")
bestand.write("brood\n")

with open("boodschappen.txt", "w") as bestand:
bestand.write("appels\n")

Nu staat er alleen nog appels in. Hoe je iets onderaan toevoegt, zie je in les 14c.


Er gaat iets mis​

Een getal schrijven

score = 120

with open("score.txt", "w") as bestand:
bestand.write(score)

Uitvoer:

TypeError: write() argument must be str, not int

write schrijft alleen tekst. Een getal maak je eerst tekst, met str(score) of in een f-string: bestand.write(f"{score}\n").

De \n vergeten

with open("boodschappen.txt", "w") as bestand:
bestand.write("melk")
bestand.write("brood")

Dit geeft geen foutmelding, maar in het bestand staat melkbrood, aan elkaar op één regel.


Opdracht 14a.1: Je favoriete spellen​

Schrijf drie spellen die je leuk vindt in spellen.txt, elk op een eigen regel. De laatste twee regels van de startcode laten zien wat er in het bestand staat; hoe dat werkt, zie je in les 14b.

Druk je meteen op Uitvoeren, dan krijg je een FileNotFoundError: het bestand bestaat nog niet. Die melding verdwijnt zodra jouw code het bestand schrijft. Onder het laatste spel staat dan nog een lege regel; waar die vandaan komt, zie je ook in 14b.

Verwachte uitvoer (met jouw spellen):

Minecraft
Mario Kart
Tetris
# Schrijf hier je code

with open("spellen.txt") as bestand:
    print(bestand.read())
Klik hier voor een tip.

Open het bestand met "w", en roep daarbinnen drie keer bestand.write() aan. Vergeet de \n niet.

Klik hier voor de oplossing.
with open("spellen.txt", "w") as bestand:
bestand.write("Minecraft\n")
bestand.write("Mario Kart\n")
bestand.write("Tetris\n")

with open("spellen.txt") as bestand:
print(bestand.read())

Uitvoer:

Minecraft
Mario Kart
Tetris

Opdracht 14a.2: Een lijst opslaan​

Schrijf elke naam uit de lijst deelnemers op een eigen regel in deelnemers.txt. Gebruik een for-loop, zodat het ook werkt als de lijst langer wordt.

Verwachte uitvoer:

Sara
Alex
Noor
deelnemers = ["Sara", "Alex", "Noor"]

# Schrijf hier je code

with open("deelnemers.txt") as bestand:
    print(bestand.read())
Klik hier voor een tip.

De for-loop staat ingesprongen binnen de with. In de loop schrijf je f"{naam}\n".

Klik hier voor de oplossing.
deelnemers = ["Sara", "Alex", "Noor"]

with open("deelnemers.txt", "w") as bestand:
for naam in deelnemers:
bestand.write(f"{naam}\n")

with open("deelnemers.txt") as bestand:
print(bestand.read())

Uitvoer:

Sara
Alex
Noor

Opdracht 14a.3: De tafel van 7 (uitdaging)​

Schrijf de tafel van 7 in tafel.txt, van 1 x 7 = 7 tot en met 10 x 7 = 70.

Verwachte uitvoer:

1 x 7 = 7
2 x 7 = 14
3 x 7 = 21
4 x 7 = 28
5 x 7 = 35
6 x 7 = 42
7 x 7 = 49
8 x 7 = 56
9 x 7 = 63
10 x 7 = 70
# Schrijf hier je code

with open("tafel.txt") as bestand:
    print(bestand.read())
Klik hier voor een tip.

range(1, 11) geeft de getallen 1 tot en met 10. Het getal en de uitkomst zet je in een f-string, dan hoef je zelf niets om te zetten naar tekst.

Klik hier voor de oplossing.
with open("tafel.txt", "w") as bestand:
for getal in range(1, 11):
bestand.write(f"{getal} x 7 = {getal * 7}\n")

with open("tafel.txt") as bestand:
print(bestand.read())

Uitvoer:

1 x 7 = 7
2 x 7 = 14
3 x 7 = 21
4 x 7 = 28
5 x 7 = 35
6 x 7 = 42
7 x 7 = 49
8 x 7 = 56
9 x 7 = 63
10 x 7 = 70