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
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:
geschriebenLesen
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 ZeilenAnhä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ücheDie 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")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öschenAusgabe:
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
FalseTipp
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:
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
Übungsaufgabe
Schreibe ein Programm, das fünf Zahlen zeilenweise in eine Datei schreibt, sie wieder einliest und die Summe ausgibt.
Quiz zur Selbstkontrolle
Was passiert mit dem Inhalt einer Datei beim Öffnen im Modus "w"?
- Er wird gelöscht (richtig)
- Er bleibt erhalten, neuer Text wird angehängt
- Die Datei wird schreibgeschützt
- Es entsteht eine Kopie
Warum verwendet man das with-Statement beim Öffnen von Dateien?
- Die Datei wird automatisch geschlossen (richtig)
- Es macht das Lesen schneller
- Es verschlüsselt die Datei
- Es ist nötig, damit open() funktioniert
Welcher Modus hängt Text an eine bestehende Datei an?
- “a” (richtig)
- “w”
- “r”
- “x”
Weiter im Kurs
Zurück: Dekoratoren
Weiter: Fehlerbehandlung mit try und except
Alle Kapitel: Python im Überblick