[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

Popular posts from this blog

[Python] Passwort cracker for Zip-archives

[Python] Writing csv files and reading them (simplified)

WebGL 2 Guide - #7 Das erste Dreieck