Dateien lesen und schreiben in Python

Mit Python kannst du mühelos Textdateien lesen und schreiben. Lerne den sicheren Umgang mit Dateien über den with-Block und die wichtigsten Modi.

Teilen
Dateien lesen und schreiben in Python

Programme, die nur im Arbeitsspeicher arbeiten, vergessen alles, sobald sie beendet werden. Damit Daten dauerhaft erhalten bleiben, musst du sie in Dateien speichern. Python macht das Lesen und Schreiben von Dateien angenehm einfach. In diesem Beitrag lernst du, wie du Textdateien öffnest, ihren Inhalt ausliest, neue Daten hineinschreibst und dabei typische Fehler vermeidest – mit dem sicheren with-Block als Standardwerkzeug.

Dateien öffnen mit open()

Der Einstieg in jede Dateioperation ist die Funktion open(). Sie braucht zwei Angaben: den Dateinamen und den Modus. Der Modus legt fest, was du mit der Datei vorhast – Lesen, Schreiben oder Anhängen. Die wichtigsten Modi sind:

  • "r" – Lesen (read), Standard. Die Datei muss existieren.
  • "w" – Schreiben (write). Überschreibt vorhandenen Inhalt komplett.
  • "a" – Anhängen (append). Hängt neuen Inhalt hinten an.
  • "x" – Exklusives Erstellen. Fehler, wenn die Datei schon existiert.

Zusätzlich solltest du immer encoding="utf-8" angeben, damit Umlaute und Sonderzeichen korrekt verarbeitet werden.

Der sichere with-Block

Eine geöffnete Datei muss am Ende wieder geschlossen werden, sonst können Daten verloren gehen. Statt das manuell mit close() zu tun, nutzt du den with-Block. Er schließt die Datei automatisch, sobald der Block endet – auch wenn unterwegs ein Fehler auftritt.

with open("notiz.txt", "w", encoding="utf-8") as datei:
    datei.write("Hallo Welt!\n")
    datei.write("Das ist meine zweite Zeile.\n")

# Hier ist die Datei bereits automatisch geschlossen
print("Datei wurde geschrieben.")

Innerhalb des with-Blocks steht dir das Dateiobjekt (hier datei) zur Verfügung. Mit write() schreibst du Text hinein. Beachte, dass du Zeilenumbrüche selbst mit \n setzen musst.

Eine Datei einlesen

Zum Lesen öffnest du die Datei im Modus "r". Du hast mehrere Möglichkeiten: read() liest den gesamten Inhalt als einen String, readlines() liefert eine Liste aller Zeilen, und am elegantesten ist es, direkt über das Dateiobjekt zu iterieren.

# Gesamten Inhalt auf einmal lesen
with open("notiz.txt", "r", encoding="utf-8") as datei:
    inhalt = datei.read()
    print(inhalt)

# Zeile für Zeile durchgehen (speicherschonend)
with open("notiz.txt", "r", encoding="utf-8") as datei:
    for zeile in datei:
        print(zeile.strip())  # strip() entfernt den Zeilenumbruch

Die Variante mit der for-Schleife ist besonders bei großen Dateien empfehlenswert, weil sie nicht die ganze Datei auf einmal in den Speicher lädt, sondern Zeile für Zeile arbeitet.

Inhalte anhängen statt überschreiben

Ein häufiger Anfängerfehler: Du öffnest eine Datei mit "w", obwohl du nur etwas ergänzen willst – und löschst damit den gesamten alten Inhalt. Wenn du Daten hinzufügen möchtest, ohne Vorhandenes zu zerstören, nutze den Anhänge-Modus "a".

# Ein Protokoll Zeile für Zeile erweitern
eintraege = ["Login erfolgreich", "Datei geladen", "Logout"]

with open("protokoll.txt", "a", encoding="utf-8") as datei:
    for eintrag in eintraege:
        datei.write(eintrag + "\n")

print("Einträge wurden angehängt.")

So baust du zum Beispiel ein Logfile auf, das bei jedem Programmlauf weiter wächst, statt jedes Mal von vorn zu beginnen.

Fehler beim Dateizugriff abfangen

Beim Arbeiten mit Dateien kann einiges schiefgehen: Die Datei existiert nicht, oder dir fehlen die Zugriffsrechte. Solche Situationen fängst du am besten mit try/except ab. Der häufigste Fehler beim Lesen ist der FileNotFoundError.

try:
    with open("gibtsnicht.txt", "r", encoding="utf-8") as datei:
        inhalt = datei.read()
        print(inhalt)
except FileNotFoundError:
    print("Die Datei wurde nicht gefunden.")
except PermissionError:
    print("Keine Berechtigung, die Datei zu lesen.")

So bleibt dein Programm auch dann stabil, wenn eine erwartete Datei fehlt. Statt eines unschönen Absturzes bekommt der Benutzer eine klare Meldung.

Fazit

Das Lesen und Schreiben von Dateien gehört zu den grundlegenden Fähigkeiten in Python. Du hast gelernt, wie du Dateien mit open() und dem passenden Modus öffnest, warum der with-Block die sichere Wahl ist und wie du Inhalte zeilenweise liest, schreibst oder anhängst. Mit try/except machst du den Dateizugriff robust gegen fehlende Dateien. Mein Tipp für den Einstieg: Verwende immer den with-Block und gib stets encoding="utf-8" an. Damit vermeidest du die häufigsten Probleme und kannst dich auf die eigentliche Logik deines Programms konzentrieren.