Python Datei lesen schreiben: open() und with einfach erklärt
Lerne, wie du in Python Dateien mit open() und with liest, schreibst und verarbeitest – mit Beispielen für Azubis, Studenten & Berufseinsteiger.
By Marcel Schmidtpeter 16 Sept 2026
Stell dir vor, dein Python-Skript läuft jeden Morgen automatisch und soll am Ende festhalten, was es getan hat - in einer Datei, die du später nachlesen kannst. Genau dafür brauchst du Dateioperationen: Mit Python Dateien lesen und schreiben zu können, ist die Grundlage fast jedes echten Skripts. Ob in der Ausbildung, im Studium oder im ersten Job - irgendwann kommt kein Weg an `open()` vorbei.
Du lernst hier, wie du mit Python Textdateien schreibst und liest, was es mit den Modi `"r"`, `"w"` und `"a"` auf sich hat und warum du fast immer `with` verwenden solltest. Am Ende steht ein komplettes, lauffähiges Mini-Programm.
Voraussetzungen: Was brauchst du?
Du brauchst drei Dinge:
Python 3.x auf deinem Rechner - Check mit `python --version` in der Konsole
Grundlagen: Variablen, Strings, Schleifen und Funktionen
Optional: Grundverständnis von `try` und `except` - dazu habe ich einen separaten Artikel: Python Exception Handling: try except finally einfach erklärt
Mehr nicht. Dateioperationen gehören zu den Grundlagen, die du in jeder Prüfung und jedem ersten echten Projekt brauchst.
Was macht open() in Python?
`open()` öffnet eine Datei und gibt ein Dateiobjekt zurück. Über dieses Objekt steuerst du alle Lese- und Schreiboperationen. Die offizielle Dokumentation dazu findest du bei Python Docs: open().
Die grundlegende Syntax:
datei = open("notizen.txt", "r")
inhalt = datei.read()
datei.close()Der zweite Parameter ist der Modus - er bestimmt, ob du lesen, schreiben oder beides kannst:
Modus | Bedeutung | Datei existiert bereits | Datei existiert nicht |
`"r"` | Nur lesen | Öffnet die Datei | `FileNotFoundError` |
`"w"` | Nur schreiben | Inhalt wird gelöscht! | Datei wird neu erstellt |
`"a"` | Anhängen | Schreibt ans Ende | Datei wird neu erstellt |
`"r+"` | Lesen und Schreiben | Öffnet die Datei | `FileNotFoundError` |
`"x"` | Neu erstellen | `FileExistsError` | Datei wird erstellt |
Merke: `"w"` löscht den kompletten bisherigen Inhalt der Datei. Wenn du etwas hinzufügen willst, nimm `"a"` (append).
Python Dateien schreiben: write() und writelines()
Zum Schreiben öffnest du eine Datei mit dem Modus `"w"`. Dafür gibt es zwei zentrale Methoden: `write()` für einzelnen Text und `writelines()` für eine Liste von Zeilen.
# Klassische Variante ohne with
datei = open("notizen.txt", "w")
datei.write("Erste Zeile\n")
datei.write("Zweite Zeile\n")
datei.close()Wichtig: `write()` fügt keinen Zeilenumbruch automatisch ein. Du musst `\n` selbst anhängen. Vergisst du das, landet alles in einer einzigen langen Zeile.
Mit `writelines()` schreibst du mehrere Zeilen auf einmal:
zeilen = ["Kaffee kaufen\n", "Lernen\n", "Sport\n"]
with open("todo.txt", "w") as datei:
datei.writelines(zeilen)Merke: `write()` schreibt Text ohne automatischen Zeilenumbruch - hänge `\n` an, wenn die Zeile abgeschlossen sein soll.
Wie liest du Dateien in Python?
Zum Lesen öffnest du die Datei mit `"r"` - das ist der Standardmodus, du kannst ihn also auch weglassen. Es gibt drei typische Varianten:
# Variante 1: komplette Datei als ein String
with open("notizen.txt", "r") as datei:
inhalt = datei.read()
print(inhalt)
# Variante 2: nur eine einzige Zeile
with open("notizen.txt", "r") as datei:
erste_zeile = datei.readline()
print(erste_zeile)
# Variante 3: alle Zeilen als Liste
with open("notizen.txt", "r") as datei:
zeilen = datei.readlines()
print(zeilen) # ['Erste Zeile\n', 'Zweite Zeile\n']Am häufigsten brauchst du aber die elegante Variante: Du iterierst direkt über das Dateiobjekt, Zeile für Zeile. Dabei wird nicht die ganze Datei auf einmal in den Speicher geladen - das macht bei großen Dateien einen echten Unterschied. Wie das Iterieren genau funktioniert, habe ich in Iterable und Iterator in Python genauer erklärt.
with open("notizen.txt", "r") as datei:
for zeile in datei:
print(zeile.strip()) # strip() entfernt \n am ZeilenendeMerke: `for zeile in datei:` verarbeitet die Datei Zeile für Zeile, ohne alles auf einmal in den Speicher zu laden - ideal für große Dateien.
Warum solltest du immer with verwenden?
`with` öffnet eine Datei als Context Manager - und schließt sie automatisch, sobald der Block endet. Stell dir das wie ein Buch aus der Bibliothek vor: Du musst es zurückgeben, egal wie dein Tag läuft. `with` erledigt die Rückgabe für dich, selbst wenn im Block ein Fehler auftritt.
Der Unterschied:
# FALSCH: close() kann vergessen werden,
# besonders wenn zwischendurch ein Fehler auftritt
datei = open("notizen.txt", "r")
inhalt = datei.read()
datei.close()
# RICHTIG: Datei wird immer zuverlaessig geschlossen
with open("notizen.txt", "r") as datei:
inhalt = datei.read()Warum ist das wichtig? Offene Dateien blockieren Ressourcen: Unter Windows kannst du eine offene Datei teilweise nicht löschen oder umbenennen, und bei vielen offenen Dateien läuft deinem Programm irgendwann der Speicher voll.
Merke: `with open(...) as datei:` schließt die Datei automatisch - auch wenn im Block eine Exception fliegt. Nutze es immer.
Vollständiges Beispiel: Ein kleines Logbuch-Programm
Alle Bausteine zusammen ergeben ein lauffähiges Programm. Es hängt Einträge an eine Logdatei an und liest sie anschließend aus:
def eintrag_schreiben(text):
# "a" haengt an eine bestehende Datei an
# und erstellt sie, falls sie noch nicht existiert
with open("logbuch.txt", "a", encoding="utf-8") as datei:
datei.write(text + "\n")
def eintraege_lesen():
eintraege = []
try:
with open("logbuch.txt", "r", encoding="utf-8") as datei:
for zeile in datei:
eintraege.append(zeile.strip())
except FileNotFoundError:
print("Logbuch existiert noch nicht.")
return eintraege
if __name__ == "__main__":
eintrag_schreiben("Programm gestartet")
eintrag_schreiben("Erster Eintrag erfasst")
print("Alle Eintraege:")
for eintrag in eintraege_lesen():
print("-", eintrag)Speichere den Code als `logbuch.py` und führe ihn mit `python logbuch.py` aus. Bei jedem Start kommen zwei neue Zeilen dazu - der alte Inhalt bleibt erhalten, weil `"a"` nichts löscht.
Häufige Probleme & Lösungen
Problem 1: FileNotFoundError
FileNotFoundError: [Errno 2] No such file or directory: 'daten.txt'
Das passiert, wenn du mit `"r"` eine Datei lesen willst, die es nicht gibt. Prüfe den Pfad - oft liegt das Skript in einem anderen Ordner als die Datei. Robust löst du das mit `pathlib`:
from pathlib import Path
if Path("daten.txt").exists():
print("Datei gefunden")
else:
print("Datei fehlt")Details dazu in der pathlib-Dokumentation.
Problem 2: UnicodeDecodeError bei Umlauten
UnicodeDecodeError: 'utf-8' codec can't decode byte ...
Die Datei wurde in einer anderen Kodierung gespeichert (z. B. Windows-Standard mit Umlauten). Gib die Kodierung explizit an: `open("datei.txt", "r", encoding="utf-8")`. Das solltest du generell immer machen - auch beim Schreiben. Details liefert das Python-Tutorial zu Dateien.
Problem 3: Die Datei ist plötzlich leer
Du hast `"w"` verwendet und die Datei nochmal geöffnet - schwupp, war der alte Inhalt weg. Das ist kein Bug, sondern gewolltes Verhalten. Zum Anhängen neuer Zeilen gehört `"a"` in den Modus. Ein klassischer Anfängerfehler, der dir hoffentlich nur einmal passiert.
FAQ: Häufige Fragen zu open() und with
Was ist der Unterschied zwischen "w" und "a" in Python?
`"w"` öffnet eine Datei zum Schreiben und löscht den kompletten bisherigen Inhalt. `"a"` (append) hängt neuen Text ans Ende an, ohne den bestehenden Inhalt zu verändern. Beide Modi erstellen die Datei neu, falls sie noch nicht existiert.
Wie liest man eine Datei zeilenweise in Python?
Du iterierst direkt über das Dateiobjekt: `for zeile in datei:` liefert Zeile für Zeile inklusive `\n` am Ende. Mit `zeile.strip()` entfernst du den Zeilenumbruch. Diese Variante ist speicherschonender als `readlines()`.
Muss ich close() aufrufen, wenn ich with benutze?
Nein. `with` schließt die Datei automatisch am Ende des Blocks - auch wenn eine Exception auftritt. Ein manuelles `close()` ist dann überflüssig und sollte weggelassen werden.
Wie prüfe ich, ob eine Datei existiert?
Mit `Path("datei.txt").exists()` aus dem `pathlib`-Modul oder klassisch mit `os.path.exists("datei.txt")`. Alternativ fängst du den `FileNotFoundError` mit `try`/`except` ab - das ist oft der pythonischere Weg.
Was macht encoding="utf-8"?
Es legt fest, wie Python Text in Bytes umwandelt (und umgekehrt). UTF-8 ist der Standard für moderne Textdateien und unterstützt alle Sonderzeichen und Umlaute. Ohne Angabe nutzt Python die System-Standardkodierung - auf Windows führt das gern zu Problemen.
Fazit
In Python Dateien lesen und schreiben zu können gehört zum Handwerkszeug jeder Python-Entwicklerin und jedes Python-Entwicklers. Die drei Dinge, die du mitnehmen solltest:
`open()` mit dem richtigen Modus öffnen: `"r"` lesen, `"w"` neu schreiben, `"a"` anhängen
Immer `with open(...) as datei:` nutzen - nie wieder `close()` vergessen
Immer `encoding="utf-8"` angeben, damit Umlaute kein Problem werden
Wenn du diese Muster einmal verinnerlicht hast, laufen sie beim Programmieren wie von selbst - auch unter Prüfungsdruck.
Du willst deine Python-Skills gezielt aufbauen, bist gerade in der Ausbildung, im Studium oder im Berufseinstieg? Bei study-it.education findest du Nachhilfe, die sich an deinem Level orientiert - von den Grundlagen bis zu Themen wie File Handling, Exceptions und OOP. Schau vorbei und buche deine erste Session.
Need someone to walk through this with you?
Instead of re-reading: 30 min with a senior dev.
Book a free first chat →
Lerne, wie du in Python Dateien mit open() und with liest, schreibst und verarbeitest – mit Beispielen für Azubis, Studenten & Berufseinsteiger.
marcel.schmidtpeter@study-it.education →More reading
Python HTTP requests senden: GET, POST & mehr mit requests
So sendest du mit der Python-Bibliothek requests GET- und POST-Anfragen an APIs – mit Beispielen für Azubis, Studenten und Berufseinsteiger.
Python JSON verarbeiten mit dem -Modul – einfach erklärt
JSON in Python lesen und schreiben? Das -Modul macht's einfach – von .loads bis .dumps, hier lernst du alles Wichtige.
Python Datenbank verbinden: sqlite3 & SQLAlchemy einfach erklärt
Erfahre, wie du Python per sqlite3 oder SQLAlchemy mit Datenbanken verbindest – mit Praxisbeispielen für Azubis, Studenten & Berufseinsteiger.