4 min Lesezeit 16. Sept. 2026

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.

Marcel Schmidtpeter Von Marcel Schmidtpeter 16. Sept. 2026
Python Datei lesen schreiben: open() und with einfach erklärt

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:

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:

python
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.

python
# 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:

python
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:

python
# 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.

python
with open("notizen.txt", "r") as datei:
    for zeile in datei:
        print(zeile.strip())  # strip() entfernt \n am Zeilenende

Merke: `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:

python
# 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:

python
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

python
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`:

python
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

python
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:

  1. `open()` mit dem richtigen Modus öffnen: `"r"` lesen, `"w"` neu schreiben, `"a"` anhängen

  2. Immer `with open(...) as datei:` nutzen - nie wieder `close()` vergessen

  3. 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.


Passende Nachhilfe

1:1-Hilfe zu diesem Thema?

Erstgespräch · 0 € · 30 min

Brauchst du jemand, der das mit dir durchgeht?

Statt nochmal lesen: 30 min mit einem Senior-Dev.

Kostenloses Erstgespräch buchen →
Über den Autor
Marcel Schmidtpeter
Marcel Schmidtpeter

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 →
Weiterlesen

Mehr Lesestoff