Ga naar hoofdinhoud

14b Een tekstbestand lezen

info

Deze les gebruikt open, with en write, uit Een tekstbestand schrijven.

Open je een bestand zonder "w", dan kun je het lezen. bestand.read() geeft de hele inhoud als één string. Het voorbeeld schrijft het bestand eerst, zoals in 14a, zodat er iets te lezen is:

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

with open("boodschappen.txt") as bestand:
inhoud = bestand.read()

print(inhoud)

Uitvoer:

melk
brood
kaas

Onder kaas zie je nog een lege regel. Waar die vandaan komt, zie je hieronder.

Regel voor regel​

Vaak wil je met elke regel iets doen. Een for-loop over het bestand geeft je de regels één voor één:

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

with open("boodschappen.txt") as bestand:
for regel in bestand:
print(regel)

Uitvoer:

melk

brood

kaas

Er staat steeds een lege regel tussen. Elke regel uit het bestand eindigt nog op de \n die je erin schreef, en print zet er zelf nog een achter.

De enter eraf met strip()​

regel.strip() geeft de regel terug zonder spaties en enters aan het begin en het eind:

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

with open("boodschappen.txt") as bestand:
for regel in bestand:
print(f"- {regel.strip()}")

Uitvoer:

- melk
- brood
- kaas

Zonder strip() kwam het streepje wel goed, maar stond er weer een lege regel onder elke boodschap.


Er gaat iets mis​

Een bestand lezen dat er niet is

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

Uitvoer:

FileNotFoundError: [Errno 2] No such file or directory: 'boodschapen.txt'

Lezen kan alleen als het bestand al bestaat. Hier zit een typefout in de naam: boodschapen met één p. Klopt de naam wel, dan is het bestand nog niet gemaakt. Hoe je dat netjes opvangt, zie je in les 16e.


Opdracht 14b.1: Taken tellen​

De startcode schrijft een takenlijst in taken.txt. Lees het bestand regel voor regel en tel hoeveel taken erin staan.

Verwachte uitvoer:

Er staan 4 taken in de lijst.
with open("taken.txt", "w") as bestand:
    bestand.write("huiswerk\nkamer opruimen\nhond uitlaten\nafwassen\n")

# Schrijf hier je code
Klik hier voor een tip.

Begin met aantal = 0 en tel er in de for-loop steeds 1 bij, net als de teller in les 6c. Korter schrijf je dat als aantal += 1, zoals in les 7.

Klik hier voor de oplossing.
with open("taken.txt", "w") as bestand:
bestand.write("huiswerk\nkamer opruimen\nhond uitlaten\nafwassen\n")

aantal = 0
with open("taken.txt") as bestand:
for regel in bestand:
aantal += 1

print(f"Er staan {aantal} taken in de lijst.")

Uitvoer:

Er staan 4 taken in de lijst.

Opdracht 14b.2: Iedereen begroeten​

In namen.txt staat op elke regel een naam. Print voor elke naam een groet, zonder lege regels ertussen.

Verwachte uitvoer:

Hoi Sara, welkom.
Hoi Alex, welkom.
Hoi Noor, welkom.
with open("namen.txt", "w") as bestand:
    bestand.write("Sara\nAlex\nNoor\n")

with open("namen.txt") as bestand:
    for regel in bestand:
        print(f"Hoi {regel}, welkom.")
Klik hier voor een tip.

Draai de startcode eerst. De komma staat op een nieuwe regel: de enter zit nog in regel.

Klik hier voor de oplossing.
with open("namen.txt", "w") as bestand:
bestand.write("Sara\nAlex\nNoor\n")

with open("namen.txt") as bestand:
for regel in bestand:
print(f"Hoi {regel.strip()}, welkom.")

Uitvoer:

Hoi Sara, welkom.
Hoi Alex, welkom.
Hoi Noor, welkom.

Opdracht 14b.3: Alles bij elkaar opgeteld (uitdaging)​

In stappen.txt staat per dag hoeveel stappen iemand zette. Tel ze op.

Verwachte uitvoer:

Totaal: 23500 stappen
with open("stappen.txt", "w") as bestand:
    bestand.write("8000\n4500\n11000\n")

# Schrijf hier je code
Klik hier voor een tip.

Elke regel is tekst. Met int(regel.strip()) maak je er een getal van, zoals in les 3b.

Klik hier voor de oplossing.
with open("stappen.txt", "w") as bestand:
bestand.write("8000\n4500\n11000\n")

totaal = 0
with open("stappen.txt") as bestand:
for regel in bestand:
totaal += int(regel.strip())

print(f"Totaal: {totaal} stappen")

Uitvoer:

Totaal: 23500 stappen