Tagebuch-Eintrag #27
Dateien lesen und schreiben in Python
Okay, okay. Eine ganze Sonntagsbeschäftigung war es nicht. Ich habe vielleicht 2 Stunden heute insgesamt mit Python lernen verbracht und eine interessante Lektion war Dateien lesen und schreiben in Python.
Diese Funktion kannte ich schon und hatte es für meinen Monster-Game schon angewandt, wo ich die Punkte in der Datei scoreboard.txt geschrieben hatte.
Heute aber, habe ich etwas neue gelernt. Aber alles der Reihe nach.
Text (*txt) Dateien lesen und schreiben
Dass ich eine Datei zum lesen öffnen kann, muss ich die .open-Funktion verwenden und dazu den Modus lesen (r) zuweisen. Der Code dazu, sieht wie folgt aus:
scoreboard_file = open("scoreboard.txt", "r")
for score in scoreboard_file.readlines():
print("#", score)
scoreboard_file.close()
Zeile 1: Ich öffen die Datei scoreboard.txt im Lesemodus (r)
Zeile 2: ich definiere eine for-Schleife um die Zeilen auszulesen
Zeile 3: Ich gebe jede Zeile einzeln aus
Zeile 4: die Datei scoreboard.txt wird geschlossen.
Die Ausgabe sieh so aus:

Jetzt kommt das, was ich heute neu gelernt habe.
Zusätzlicher Zeilenumbruch entfernen
Wie im obigen Screenshot zu sehen, ist immer eine zusätzliche Leerzeile/Zeilenumbruch vorhanden. Das sieht nicht schön aus und möchte ich auch nicht. Und das geht ganz einfach. Im o.g. print-Befehl, füge ich .strip() an. Der Befehl sieht dann so aus:
print("#", score.strip())
Und die Ausgabe ist nun viel sauberer:

Dateien öffnen mit with
Das nächste was ich gelernt habe ist, dass man die Datei nicht einfach über Variable = open() öffnen sollte. Der Nachteil dabei ist, das die Datei solange geöffnet ist, bis dieser per .close() geschlossen wird. Und ich bin sicher, dass man das leicht und schnell vergessen kann.
Außerdem kann z.B: in der for-Schleife ein Fehler passieren, so dass der Code gar nicht bis zu .close-Befehl kommt, um die Datei zu schließen.
Statt also die o.g. Methode zu nutzen, ist es besser die with-Variante zu nutzen, um Dateien zu öffnen und zu bearbeiten. Der Code dafür sieht zum Beispiel so aus:
with open("scoreboard.txt", "r") as datei:
for zeile in datei:
print("#", zeile.strip().split(","))
Der Vorteil dieser Variante ist, das die Datei nur zum ausführen des einrückenden Codes geöffnet wird und außerhalb der Einrückung geschlossen wird und ist. Dadurch erspart man sich den close-Befehl und verhindert, dass die Datei ständig geöffnet ist, obwohl man diese gar nicht mehr benötigt.
Text (txt) Datei schreiben
Um eine Datei zu beschreiben, muss diese natürlich auch erst geöffnet werden. Danach muss der Modus gesetzt werden, um in einer Datei zu schreiben.
Mit Modus w wie write – also schreiben – wird die genannte Datei mit Informationen befüllt. Ist die Datei nicht vorhanden, so wird die Datei erstellt.
with open("datei-w.txt", "w") as datei:
datei.write("Das ist ein Text in einer Datei")
Ganz wichtig im Modus w: Wenn sich schon Inhalt in der Datei befindet, wird dieser ohne Hinweis gelöscht und mit dem neuen Inhalt ersetzt.
Deswegen ist nach meinen bisherigen Kenntnissen meiner Meinung nach besser den Modus a zu verwenden.
Modus a wie append – also anhängen – wird einfach der neue Inhalt an das Ende der letzten Zeile in der Datei angehängt. Der bisherige Inhalt wird also nicht gelöscht.
Der Modus a wird in meinem scoreboard.txt aus meinem Monster-Game eingesetzt.
with open("datei-w.txt", "a") as datei:
datei.write("Das ist ein Text in einer Datei\n")
Es gibt noch den Modus r+, aber damit habe ich mich noch nicht beschäftigt.
Heute habe ich auch das Thema CSV-Datei in Python lesen und schreiben behandelt. Dazu schreibe ich im nächsten Tagebuch-Eintrag was.
Ich werde in Zukunft also Dateien mit dem Kontrukt with öffnen, wenn ich diese lesen und schreiben möchte.
Das reicht für heute. Over and out. Jing