EMZETT.
Login

Kurz: Programme speichern und laden Daten in Dateien. In Python öffnest du eine Datei mit open(), arbeitest damit und schließt sie wieder.

Teil des Kurses Python

Kapitel 28 von 44 im Kurs Python (Abschnitt „Dateien und Fehler“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Programme speichern und laden Daten in Dateien. In Python öffnest du eine Datei mit open(), arbeitest damit und schließt sie wieder. Das Muster mit with erledigt das Schließen automatisch, auch wenn ein Fehler passiert, und ist deshalb die empfohlene Art.

Schreiben

Der Modus "w" (write) legt die Datei an oder überschreibt sie. Mit encoding="utf-8" kommen Umlaute überall richtig an:

with open("notizen.txt", "w", encoding="utf-8") as datei:
    datei.write("Erste Zeile\n")
    datei.write("Zweite Zeile mit Umlauten: äöü\n")
 
print("geschrieben")

Ausgabe:

geschrieben

Lesen

Mit "r" (read, der Standard) liest du. Je nach Bedarf alles auf einmal, zeilenweise oder in eine Liste:

# Vorbereitung: die Datei aus dem letzten Beispiel anlegen
with open("notizen.txt", "w", encoding="utf-8") as datei:
    datei.write("Erste Zeile\nZweite Zeile mit Umlauten: äöü\n")
 
with open("notizen.txt", encoding="utf-8") as datei:
    inhalt = datei.read()
print(inhalt)
 
with open("notizen.txt", encoding="utf-8") as datei:
    for zeile in datei:                 # speicherschonend, Zeile für Zeile
        print(zeile.rstrip("\n").upper())
 
with open("notizen.txt", encoding="utf-8") as datei:
    zeilen = datei.readlines()
print(len(zeilen), "Zeilen")

Ausgabe:

Erste Zeile
Zweite Zeile mit Umlauten: äöü
 
ERSTE ZEILE
ZWEITE ZEILE MIT UMLAUTEN: ÄÖÜ
2 Zeilen

Anhängen

Mit "a" (append) schreibst du ans Ende, ohne den Inhalt zu löschen:

with open("notizen.txt", "a", encoding="utf-8") as datei:
    datei.write("Noch eine Zeile\n")
 
with open("notizen.txt", encoding="utf-8") as datei:
    print(datei.read().count("\n"), "Zeilenumbrüche")

Ausgabe:

1 Zeilenumbrüche

Die Modi im Überblick

ModusBedeutung
"r"lesen (Datei muss existieren)
"w"schreiben, Datei neu anlegen oder leeren
"a"anhängen
"x"neu anlegen, Fehler falls sie schon existiert
"r+"lesen und schreiben
"b"zusätzlich: Binärdaten ("rb", "wb"), z. B. für Bilder

Wenn die Datei fehlt

Existiert die Datei nicht, entsteht ein FileNotFoundError. Wie du so etwas abfängst, siehst du im nächsten Kapitel:

open("gibt_es_nicht.txt")

Fehlermeldung:

Traceback (most recent call last):
  File "beispiel.py", line 1, in <module>
    open("gibt_es_nicht.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'gibt_es_nicht.txt'

Pfade mit pathlib

Das Modul pathlib macht Pfade plattformunabhängig und bringt viele Abkürzungen mit:

from pathlib import Path
 
ordner = Path("beispiel_ordner")
ordner.mkdir(exist_ok=True)
datei = ordner / "daten.txt"            # Pfade mit / zusammensetzen
datei.write_text("Hallo aus pathlib\n", encoding="utf-8")
 
print(datei.exists(), datei.name, datei.suffix)
print(datei.read_text(encoding="utf-8").strip())
print([p.name for p in ordner.iterdir()])
 
datei.unlink()          # Datei löschen
ordner.rmdir()          # leeren Ordner löschen

Ausgabe:

True daten.txt .txt
Hallo aus pathlib
['daten.txt']

Aufräumen im Beispiel

import os
 
open("notizen.txt", "w").close()        # leere Datei anlegen
print(os.path.exists("notizen.txt"))
os.remove("notizen.txt")                 # und wieder löschen
print(os.path.exists("notizen.txt"))

Ausgabe:

True
False

Tipp

Schreibe Dateien mit encoding="utf-8". Ohne Angabe nutzt Python die Standardkodierung des Systems, und Programme verhalten sich dann auf Windows und Linux unterschiedlich.

Merke

  • with open(name, modus, encoding="utf-8") as f: schließt die Datei automatisch
  • Modi: r lesen, w schreiben (überschreibt), a anhängen, b für Binärdaten
  • f.read(), for zeile in f, f.readlines(), f.write(text)
  • FileNotFoundError, wenn eine Datei zum Lesen fehlt
  • pathlib.Path für bequeme, plattformunabhängige Pfade

Übungsaufgabe

Schreibe ein Programm, das fünf Zahlen zeilenweise in eine Datei schreibt, sie wieder einliest und die Summe ausgibt.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Dekoratoren

Weiter: Fehlerbehandlung mit try und except

Alle Kapitel: Python im Überblick