Lerne Coding
Python - Dateien lesen und schreiben
23.06.2020

Python Dateien lesen und schreiben

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGeschätzte Lesezeit ca. Minuten

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:

  • open()
  • close()
  • read()
  • write()

Es gibt noch weitere Funktionen, die aber eher seltener Anwendung finden, vor allem bei Anfängern.

Text aus einer Datei lesen

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.

Text in eine Datei schreiben

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.

Python Textdatei als Liste für jede Spalte einlesen

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?

Dateien mit Context Manager öffnen und schließen

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.

Verschiedene Modes um eine Datei zu öffnen

In Python gibt es verschiedene Modes um eine Datei zu Öffnen zu beschrieben/lesen oder zu erstellen. Hier findest du eine Übersicht aller.

Thema der Tabelle "Python Datei öffnen modes"
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.

Weitere Infos aus dem File Object rausholen

Es gibt zusätzlich einige Attribute, die im File Object dynamisch gesetzt werden. Diese geben dir weitere hilfreiche Informationen zum File.

Thema der Tabelle "Python Datei Attribute"
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.

Fazit

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".

Kommentare zum Artikel
Haag schreibt ... Kommentar vom 06.04.2021
Daten einlesen und Verarbeiten

Wie kann ich Daten in eine Dateischreiben und einzeln auslesen zur Weiterverabeitung z.b

  • Name der Aktie
  • Kaufpreis
  • Aktueller Tageskurs
  • Veränderung in Fr, USW

Diese Daten möchte ich einzeln auslesen und seperat weiter verarbeiten.

Vielne Dank für Ihre Hilfe

Antworten
Haag
Antwort von Felix Schürmeyer Kommentar vom 07.04.2021
Re: Daten einlesen und Verarbeiten

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.

Felix Schürmeyer
Kommentar schreiben

Vom Autor Empfohlen
close