in Dateien schreiben mit Python
Nach dem Auslesen einer Datei wollen wir nun aus Python heraus in eine Datei schreiben. Unser bisheriger Stand zum Auslesen der Datei mit dem Namen „textdatei.txt“ ist:
datei = open('textdatei.txt','r')
print(datei.read())
Im ersten Schritt müssen wir den Modus ändern, wie die Datei bei dem Befehl open
geöffnet wird. Es stehen und für das Schreiben die Methoden 'w', 'a' und 'r+' zur Verfügung.
Zum Testen verwenden wir den Modus 'a' für „append“ um Inhalt an eventuell bestehenden Inhalt anzuhängen.
datei = open('textdatei.txt','a')
datei.write("weitere Zeile")
Wenn wir nun das Programm ausführen lassen, erhalten wir keinerlei sichtbare Reaktion. Wenn wir nun in unsere Datei „textdatei.txt“ sehen, wurde für jedes ausführen des Python-Programms der Text „weitere Zeile“ in die Datei zu dem bestehenden Text hinzugefügt.
Der Text wird einfach am bestehenden Text am Ende angefügt. Ohne eine neue Zeile! Lassen wir das Programm zweimal ausführen, steht dann in der Datei hintereinander ohne Umbruch und ohne Leerzeichen:
weitere Zeileweitere Zeile
Wir haben also keine weitere Zeile erstellt, sondern Text an eine bestehende Zeile angehängt.
Um auch einen Zeilenumbruch zu erhalten, brauchen wir die entsprechenden Steuerzeichen. Ungeschickterweise sind diese zwischen Windows, Linux und Mac unterschiedlich. Bei einigen Systemen reicht
„\n“ für newline
„\r\n“ für return/newline
Unser Code sieht also wie folgt aus:
datei = open('textdatei.txt','r')
datei.write("\r\nweitere Zeile")
Wir fügen vor unserem Text den Zeilenumbruch hinzu. Lassen wir nun unser Programm 2-mal ausführen, erhalten wir wie gewünscht in der Datei das Ergebnis mit Zeilenumbruch:
weitere Zeile
weitere Zeile
Modus 'w' beim schreiben
Ändern wir den Modus auf 'w' wird der bereits bestehende Inhalt der Datei überschrieben mit dem neuen Inhalt.
datei = open('textdatei.txt','w')
datei.write("\r\nweitere Zeile")
Lassen wir nun unser Programm ausführen, erhalten wir im Ergebnis nur noch die Zeile. Alle alten Inhalte wurden "überschrieben".
weitere Zeile
gleichzeitig schreiben und lesen – 'r+'
Wollen wir aus einer Datei sowohl lesen wie in diese Datei schreiben, benötigen wir als Modus 'r+'. Jetzt können wir unser Python-Programm erweitern und auch gleich die neuen Inhalte auslesen.
datei = open('textdatei.txt','r+')
datei.write("\r\nweitere Zeile")
print(datei.read())
Sollte nun nichts als Ausgabe erscheinen, dann sieht man das Problem bei 'r+'. Wir lesen schneller aus, als in die Datei geschrieben wurde bzw. das System puffert und daher kommt Chaos. Daher kommt nichts in der Ausgabe. Daher den Modus 'r+' nur mit Vorsicht nutzen! Hier hilft das Schließen der Verbindung über die Methode close()
. Allerdings muss dann auch die Datei wieder geöffnet werden.
datei = open('textdatei.txt','r+')
datei.write("\r\nweitere Zeile")
datei.close()
datei = open('textdatei.txt','r+')
print(datei.read())
datei.close()
Lesen/Schreiben binär
Sollten wir nun mit binären Daten arbeiten, dann ist als Modus 'b' angesagt, der an das primäre Kürzel angehängt wird.
Beispiel für Schreiben Binär
datei = open('textdatei.txt','wb')
Oder für Lesen Binär
datei = open('textdatei.txt','rb')