Write Files (Dateien schreiben)
Kurz: Daten aus dem Programm heraus in eine Datei übertragen — entweder als reiner Text oder als Rohdaten (Bytes).
Genauer: Für Text bieten viele Sprachen gepufferte Schreib-Hilfsklassen an (siehe BufferedWriter), die Daten erst sammeln und dann gebündelt auf den Datenträger schreiben, statt bei jedem einzelnen Aufruf sofort physisch zu schreiben — das ist deutlich schneller. Wichtig ist, die Datei nach dem Schreiben wieder zu schließen (siehe try-with-resources), damit alle gepufferten Daten auch tatsächlich gespeichert werden.
Im Detail
with open("ausgabe.txt", "w") as f:
for zeile in daten:
f.write(zeile + "\n")
# beim Verlassen des "with"-Blocks: Puffer wird geleert (flush) UND Datei geschlossenDer Grund für das Puffern liegt in der Geschwindigkeit: Ein einzelner physischer Schreibzugriff auf einen Datenträger ist um Größenordnungen langsamer als ein Schreibzugriff in den Arbeitsspeicher. Würde jeder einzelne write()-Aufruf sofort auf die Festplatte durchschlagen, wäre das Schreiben tausender einzelner Zeilen extrem langsam. Stattdessen sammelt ein Puffer (Buffer) die Daten im Arbeitsspeicher und schreibt sie erst in größeren Blöcken tatsächlich physisch — entweder automatisch, wenn der Puffer voll ist, oder explizit beim Schließen der Datei (“Flush”).
Das führt zu einer wichtigen Falle: Solange eine Datei nicht sauber geschlossen (oder explizit “geflusht”) wurde, befinden sich geschriebene Daten möglicherweise NUR im Puffer im Arbeitsspeicher — stürzt das Programm vorher ab oder wird abrupt beendet, sind diese Daten verloren, obwohl der Code scheinbar problemlos write() aufgerufen hat. Deshalb ist zuverlässiges Schließen (idealerweise über try-with-resources bzw. das with-Statement, das auch bei einer Exception garantiert schließt) kein optionales Detail, sondern notwendig für korrekte Datenpersistenz.
Ein weiterer wichtiger Unterschied: Überschreiben vs. Anhängen. Standardmäßig (Modus "w") wird eine bestehende Datei beim erneuten Öffnen zum Schreiben komplett geleert, bevor neu geschrieben wird. Wer stattdessen an bestehenden Inhalt anhängen will (z. B. bei einer Logdatei, die über die Programmlaufzeit hinweg wächst), muss explizit den Anhänge-Modus ("a", append) verwenden — sonst gehen bei jedem Neustart des Programms alle bisherigen Log-Einträge verloren.
Siehe auch: Files, BufferedWriter, try-with-resources