Zum Inhalt springen
BetaEN
Lektion 16 von 35Python

Python · Lektion 16 · 25 Minuten

Dateien lesen und schreiben

Das lernst du

  • Mit open() und with Dateien schreiben und lesen
  • Zeilen einer Datei verarbeiten
  • Daten an eine Datei anhängen

Daten, die bleiben

Variablen vergessen alles, sobald das Programm endet. Wenn du etwas aufheben willst – Highscores, Einstellungen, Messwerte deines Roboters –, schreibst du es in eine Datei.

Gut zu wissen: Auf Codelix liegen die Dateien in einem kleinen, unsichtbaren Speicher im Browser. Sie gelten nur, solange die Seite offen ist. Auf deinem Computer funktioniert der Code genauso – dort landen die Dateien wirklich auf der Festplatte.

Schreiben

open(name, "w") öffnet eine Datei zum Schreiben (w wie write). Mit with wird sie am Ende automatisch geschlossen:

with open("einkauf.txt", "w") as datei:
    datei.write("Milch\n")
    datei.write("Brot\n")

print("Gespeichert!")

\n ist ein Zeilenumbruch. Ohne ihn stünde alles in einer langen Zeile.

Lesen

Ohne zweiten Wert öffnet open() zum Lesen. Mit einer for-Schleife bekommst du die Datei Zeile für Zeile:

with open("einkauf.txt", "w") as datei:
    datei.write("Milch\nBrot\nÄpfel\n")

with open("einkauf.txt") as datei:
    for nummer, zeile in enumerate(datei, start=1):
        print(nummer, zeile.strip())

strip() entfernt den Zeilenumbruch am Ende jeder Zeile.

Anhängen

"w" löscht den alten Inhalt. Willst du etwas dazuschreiben, nimm "a" (wie append):

with open("log.txt", "w") as datei:
    datei.write("Start\n")

for runde in range(3):
    with open("log.txt", "a") as datei:
        datei.write(f"Runde {runde}\n")

print(open("log.txt").read())
ModusBedeutung
"r"lesen (Standard)
"w"schreiben – alter Inhalt wird gelöscht
"a"anhängen ans Ende

Merke: Dateien enthalten immer Text. Zahlen musst du beim Lesen mit int() oder float() zurückverwandeln.

Kurz-Check

Bevor es an die Aufgabe geht: Was gibt dieses Programm aus? Tipp deine Vermutung ein – Python rechnet danach nach.

with open("notiz.txt", "w") as f:
    f.write("A\nB\nC\n")
with open("notiz.txt") as f:
    print(len(f.readlines()))

Deine Aufgabe

Jetzt bist du dran

Schreib die Highscores aus der Liste punkte in die Datei highscores.txt – jede Zahl in eine eigene Zeile. Lies die Datei danach wieder ein, rechne die Zahlen zusammen und gib Summe: 52 aus. Der Test probiert es auch mit einer anderen Liste.

punkte = [12, 7, 33]

# 1. Schreiben

# 2. Lesen und zusammenrechnen

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:

punkte = [12, 7, 33]

with open("highscores.txt", "w") as datei:
    for p in punkte:
        datei.write(f"{p}\n")

summe = 0
with open("highscores.txt") as datei:
    for zeile in datei:
        summe += int(zeile)
print(f"Summe: {summe}")