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")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")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")1 Zeilenumbrüche
Die Modi im Überblick
| Modus | Bedeutung |
|---|---|
"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")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öschenTrue 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"))True False
Merke
with open(name, modus, encoding="utf-8") as f:schließt die Datei automatisch- Modi:
rlesen,wschreiben (überschreibt),aanhängen,bfür Binärdaten f.read(),for zeile in f,f.readlines(),f.write(text)FileNotFoundError, wenn eine Datei zum Lesen fehltpathlib.Pathfür bequeme, plattformunabhängige Pfade
Aufgabe
Schreibe ein Programm, das fünf Zahlen zeilenweise in eine Datei schreibt, sie wieder einliest und die Summe ausgibt.