In Python Textdateien lesen und schreiben ist keine große Schwierigkeit. Es klingt komplexer als es wirklich ist. Du brauchst zum Lesen und Schreiben in einem sehr einfachen Setup jeweils drei verschiedene Funktionen.
Die am häufigsten benötigten Funktionen sind die folgenden:
Es gibt noch weitere Funktionen, die aber eher seltener Anwendung finden, vor allem bei Anfängern.
Die open-Funktion erwartet einen Dateinamen und einen Mode. Den FileMode findest du unten in einer ausführlichen Tabelle. Hier verwenden wir "r" für Read. Dabei wird die Datei nur geöffnet zum Lesen, Schreib-Operationen erzeugen Fehler und die Datei muss bereits existieren, sonst erscheint ein FileNotFoundError. Das FileObject wird einer Variable zugewiesen. Darauf können wir nun verschiedene Aktionen ausführen. Um diese Textdatei zu lesen können wir zum Beispiel die read()-Methode abrufen, als Parameter können wir noch eine Anzahl von Bytes/Chars angeben, die wir lesen wollen, falls wir nicht die ganze Datei haben wollen.
file = open('deineDatei.txt','r')
print(file.read())
file.close()
Zuletzt müssen wir die Datei noch mit close() schließen, da sonst der FileStream weiterhin für die Programmlaufzeit offen ist und das bei einigen Tausend Dateien zu deutlichen Performance -Problemen führen kann. Weiter unten zeige ich noch einmal ein Beispiel, bei dem ihr nicht die close()-Methode ausführen müsst, sondern mit dem Context-Manager von Python arbeiten könnt.
Beim Schreiben des Textes verwenden wir ebenfalls wieder die open()-Funktion; allerdings dieses Mal mit dem Mode "w" für Write, wenn die Datei nun nicht existieren sollte, wird diese automatisch im Verzeichnis erstellt. Danach können wir diese Datei beschreiben. Hier können wir keinen Read ausführen; falls wir das tun wollen, könnten wir "w+" verwenden, dann können wir die Textdatei schreiben und lesen.
file = open('deineDatei2.txt','w')
print(file.write("Hallo Welt"))
file.close()
Wichtig ist, die Datei am Ende wieder zu schließen. Das sollte man unbedingt tun um Performance zu sparen.
Um die einzelnen Zeilen einer Datei als Liste zu erhalten, zum Beispiel für eine Weiterverarbeitung, bietet sich an, readlines() zu verwenden. Dabei erhält man eine Liste von allen Zeilen einer Datei.
file = open('deineDatei2.txt','r')
print(file.readlines())
# ['Hallo Welt 1\n', 'Hallo Welt 2\n', 'Hallo Welt 3\n', 'Hallo Welt 4\n', 'Hallo Welt 5']
file.close()
Aufgepasst: Es gibt auch einen writelines()-Befehl. Wer jetzt denkt, es reiche, die Zeilen einzeln zu schreiben, also mittels writelines() eine Liste durchzujagen um anschließend dann eine Datei mit mehreren Zeilen zu erhalten, liegt falsch. Writelines() sorgt nur dafür, dass man bezüglich der Position immer am Ende des zuvor Geschriebenen ist, ähnlich wie beim Append-Mode, Weiteres dazu in der Tabelle. So können mehrere Write-Befehle im w-mode hintereinander ausgeführt werden. Wenn man den FileStream wieder schließt und wieder anfängt zu schreiben, wird wieder an Position 0 gestartet, der Append-Mode würde am Ende weiter machen.
Deshalb benötigt man, um wirklich die einzelnen Zeilen zu schreiben, den New Line Char im String, das könnte z.B. so aussehen:
file = open('deineDatei2.txt','w')
for elm in ["Hallo","Welt","Was","geht","ab?"]:
file.writelines(elm + "\n")
file.close()
Als Ergebnisse würden wir das Folgende erhalten:
Hallo
Welt
Was
geht
ab?
Der Context Manager kürzt das Öffnen und Schließen unserer Textdatei um eine Zeile. Hier einmal ein Vergleich von vorher zu nachher:
with open('deineDatei.txt','r') as file:
print(file.read())
file = open('deineDatei.txt','r')
print(file.read())
file.close()
Mittels des with-Statements können wir die Datei nun öffnen. Wenn wir nun den with-Block verlassen, ist die Datei automatisch geschlossen. So vergisst man seltener eine Datei nach der Verwendung wieder zu schließen, da man einfach nur die Einrückung verlassen muss.
In Python gibt es verschiedene Modes um eine Datei zu Öffnen zu beschrieben/lesen oder zu erstellen. Hier findest du eine Übersicht aller.
Modus | Englischer Name | Beschreibung |
---|---|---|
r | read | Datei wird zum Lesen geöffnet, wenn nicht vorhanden, wird ein Fehler geworfen. (FileNotFoundError) |
w | write | Datei wird zum Schreiben geöffnet, wenn nicht vorhanden, wird eine neue Datei erstellt. |
x | exclusiv | Datei wird geöffnet zum Schreiben, wenn die Datei bereits vorhanden ist, gibt es einen Fehler. (FileExistsError) |
a | append | Datei wird geöffnet, falls vorhanden und der neue Text wird in der Datei ergänzt. Wenn die Datei noch nicht existiert, wird diese auch erstellt. |
b | binary mode | Binärer Mode |
t | text mode (default) | Text Mode (Die Bytes werden direkt in den entsprechenden Char konvertiert, z.B. werden bei Linebreaks diese direkt für das Betriebssystem richtig ausgegeben) |
+ | read/write multiple | Hiermit kannst du zugleich Lesen und Schreiben ausführen. |
r+ | read/write no truncation | Hierbei wird das Bestehende in der Datei gelesen und nur ab Position 0 der neue String eingesetzt, das Alte an der Stelle wird überschrieben |
w+ | read/write truncation | Hier bei wird alles aus der Datei gelöscht und dann ab Position 0 der neue Text Eingesetzt |
Folgende Parameter kannst du bei r,w,x,a ergänzend verwenden: b,t,+. Diese Parameter geben zusätzliche Eigenschaften an.
Es gibt zusätzlich einige Attribute, die im File Object dynamisch gesetzt werden. Diese geben dir weitere hilfreiche Informationen zum File.
Attribute | Beschreibung |
---|---|
file.closed | Gibt true oder false zurück, je nach dem ob die Datei noch geöffnet oder schon geschlossen wurde. |
file.mode | Gibt den aktuellen Mode zurück, in dem die Datei geöffnet wurde. |
file.name | Gibt den aktuellen Dateinamen der Datei zurück. |
Mittels Python ist es schnell und einfach möglich, Textdateien zu manipulieren/schreiben/lesen. Mittels des Context Managers ist das Schließen auch einfach, und man vergisst es nicht so schnell. Daher kann ich nur empfehlen, immer mit dem Context Manager (dem with-Statement) zu arbeiten.
Ich wünsche dir viel Spaß mit deinem neuen Wissen zum Thema "Dateien schreiben und lesen mittels Python".
Hinterlasse mir gerne einen Kommentar zum Artikel und wie er dir weitergeholfen hat beziehungsweise, was dir helfen würde das Thema besser zu verstehen. Oder hast du einen Fehler entdeckt, den ich korrigieren sollte? Schreibe mir auch dazu gerne ein Feedback!
Guten Tag,
um Einzelende Wert zugeordnet in einer Datei zu Speichern empfiehlt es sich mittels dem JSON oder CSV Format zu Arbeiten. Je nach Aufbau des Datensatzes empfiehlt es sich eher mit einer CSV zu Arbeiten, wenn Täglich neue Werte für die verschiedenen Spalten vorhanden sind zum Beispiel.
Zu beiden habe ich entsprechenden Artikel geschrieben:
Grüße Felix.
Wie kann ich Daten in eine Dateischreiben und einzeln auslesen zur Weiterverabeitung z.b
Diese Daten möchte ich einzeln auslesen und seperat weiter verarbeiten.
Vielne Dank für Ihre Hilfe