[Python] Dateien richtig lesen/schreiben
In Python gibt es mehrere Möglichkeiten Dateien zu schreiben und aus diesen zu lesen.
Möglichkeit 1 (der nicht so sichere Weg)
Eine Datei zum schreiben öffnen und beschreiben:
1 2 3 4 5 6 | file = open("datei.txt", "w") file.write("Hallo ") file.write("Welt!\n") file.write("\n") file.write("Wie geht es dir?") file.close() |
Output:
Hallo Welt! Wie geht es dir?
Was passiert hier genau?
Gehen wir es Zeile für Zeile durch:
file = open("datei.txt", "w")Öffnet die Datei "datei.txt" mit Schreibrechten "w" für "write"
file.write("Hallo ")Schreibt die Zeichenkette "Hallo " in die Datei
file.write("Welt!\n")Schreibt die Zeichenkette "Welt\n" in die Datei, wobei das "\n" für einen Zeilenumbruch steht
file.write("\n")Schreibt einen Zeilenumbruch "\n" in die Datei
file.write("Wie geht es dir?")Schreibt die Zeichenkette "Wie geht es dir?" in die Datei
file.close()Schließt die Datei
Und das Lesen der Datei geht wie folgt:
1 2 3 4 5 | file = open("datei.txt", "r") for line in file: print(line) file.close() |
Gehen wir es wieder Zeile für Zeile durch:
file = open("datei.txt", "r")Öffnet die Datei "datei.txt" mit Leserechten "r" für "read"
for line in file:In einer "for"-Schleife wird jede Zeile der Datei durchlaufen und der Zeileninhalt in der Variable "line" gespeichert
print(line)Gibt jede Zeile aus
file.close()Schließt die Datei
Dieser Weg funktioniert zwar, ist aber dennoch nicht zu empfehlen.
Warum? -> Ließ weiter :)
Jede Datei die geöffnet wurde, sollte nach Gebrauch geschlossen werden:
file.close()
Was ist aber, wenn ein Fehler nach dem Öffnen aber vor dem Schließen der Datei auftritt?
Genau - dann wird diese Datei nie geschlossen, da der Python Interpreter das Programm aufgrund des Fehlers frühzeitig beendet.
Siehe folgendes Beispiel:
1 2 3 4 | file = open("datei.txt", "w") file.write("Hallo Welt\n") file.wite("Wie geht es dir?") file.close() |
In der dritten Zeile haben wir uns verschrieben "wite"
file.wite("Wie geht es dir?")
Dies würde zu einem Abbruch des Programms führen und Zeile 4 würde nie ausgeführt werden!
file.close()
Wie können wir trotzdem sicherstellen, dass selbst bei einem Fehler oder frühzeitigem Beenden des Programms die Datei geschlossen wird?
Möglichkeit 2 (der bessere Weg)
Eine Datei zum schreiben öffnen und beschreiben:
1 2 3 4 5 | with open("datei.txt", "w") as file: file.write("Hallo") file.write("Welt!\n") file.write("\n") file.write("Wie geht es dir?") |
Da dieser Weg der Möglichkeit 1 sehr ähnelt, besprechen wir nur die Unterschiede.
with open("datei.txt", "w") as file:
Der "with"-Ausdruck stellt sicher, dass selbst bei einem Fehler die Datei noch geschlossen wird.
Mehr noch, er erspart uns auch das manuelle Schließen der Datei!
file.close()Wird nicht mehr gebraucht!
Der "as"-Operator erstellt einen alias mit dem wir auf die Datei zugreifen können.
with open("datei.txt", "w") as file: file.write("Hallo")
Der Rest des Codes (Zeile 2 - 5) hat sich nicht geändert und sollte daher kein Problem mehr darstellen.
Und das Lesen der Datei geht wieder wie folgt:
1 2 3 4 | with open('datei.txt', "r") as file: lines = file.read() print(lines) |
with open('datei.txt', "r") as file:Wir benutzen wieder den "with"-Ausdruck und den "as"-Operator
lines = file.read()Mit der "read"-Methode lesen wir die komplette Datei ein
print(lines)Ausgeben der Datei
Ein manuelles Schließen ist hier nicht notwendig!
Es sollte bei Dateizugriffen immer mit dem "with"-Ausdruck gearbeitet werden!
Comments
Post a Comment