Python 4.2 – Dateien Schreiben und Lesen

Viele Programme beziehen ihre Daten weder aus Eingabe durch Menschen noch durch Daten, die direkt im Programm vorhanden sind.

Stattdessen werden größere Datenmengen oft in externe Dateien ausgelagert, die dann vom Programm eingelesen und weiterverarbeitet werden. Im Folgenden wollen wir uns ansehen, wie das funktioniert.

open-Befehl zum Öffnen von Dateien

Um den Inhalt einer Datei zu lesen, muss sie zunächst geöffnet werden. Wir verwenden dazu den Befehl open. Der Rückgabewert des open-Befehls stellt einen sogenannten Filehandler dar, über den wir anschließend Zugriff auf den Inhalt der Datei bekommen.

Der zweite Parameter der open-Funktion bestimmt den Modus, mit dem die Datei geöffnet wird. Dabei existieren eine Vielzahl an Modi, von denen wir die wichtigsten im folgenden vorstellen wollen:

  • r: read only (Nur Lesen)
  • w: write only (Nur Schreiben)
  • w+ : reading and writing (Schreiben und Lesen)
  • a: appending mode (Daten anfügen)

Code-Beispiel - Datei zum lesen öffnen:

f = open("demofile.txt", "r")

In Beispiel 1 öffnen wir ein File im Modus ‚r‘, d.h. wir können aus der Datei nur Lesen.

Code-Beispiel - Datei zum Daten anfügen öffnen:

f = open("demofile.txt", "a")

In Beispiel 2 öffnen wir ein File im Modus ‚a‘, d.h. wir können nur am Ende der Datei weitere Daten anfügen.

Read-Befehl zum Auslesen von Dateien

Der read-Befehl ist eine Methode des Objekts, das von dem Befehl „open“ zurückgegeben wird. Wir können die Read-Methode dementsprechend folgendermaßen aufrufen:

Code-Beispiel - Datei öffnen und Textinhalt anzeigen:

f = open("demofile.txt", "r")
f.read()

Code-Beispiel - Textdatei Zeile für Zeile lesen und anzeigen:

Damit geben wir den Inhalt der Textdatei aus. Wir können eine Textdatei auch Zeile pro Zeile lesen.

f = open("demofile.txt", "r")
for line in f:
    print(line)

Close-Befehl zum Schließen von Dateien

Der Close-Befehl gibt die mit einem Filehandler assoziierte Datei wieder frei. Zudem wird der Filepuffer geleert. In Kürze: Die Datei wird geschlossen.

Code-Beispiel - Dateiöffnen, auslesen und dann schließen

f = open("demofile.txt", "r")
f.read()
f.close()

In Dateien Schreiben

In Dateien schreiben funktioniert ganz ähnlich wie das Lesen aus Dateien. Man verwendet den open-Befehl um die Datei im entsprechenden Modus zu öffnen. Der eigentliche Schreibvorgang wird mit dem Write-Befehl ausgeführt. Abschließend wird die Datei mit dem Close-Befehl geschlossen.

Code-Beispiel - Datei öffnen, "Hallo" in die Datei schreiben und dann schließen der Datei.

f = open("demofile.txt", "w")
f.write("Hallo")
f.close()

Code-Beispiel - Daten anfügen mit dem append-Modus  "a"

Alternativ können wir die Datei im Modus „a“ öffnen. Hier steht der Schreibzeiger bei der Öffnung der Datei direkt am Ende. Jeder Schreibvorgang wird also am Ende der Datei durchgeführt werden.

f = open("demofile.txt", "a")
f.write("Dieser Text steht am Ende")
f.close()

Code-Aufgabe - Jetzt bist du dran:

Dir liegt eine Schriftrolle mit deinen treuesten Rittern vor. Du willst die Namen dieser Ritter zusammen mit ihrem Alter beim nächsten Turnier verlesen.

Da du dich gut mit Python auskennst, hast du die Namen und das Alter der Ritter in einer Datei namens "Ritter.txt" abgespeichert.

Die Text-Datei Ritter.txt hat folgende Einträge:

Lanzelot, 24
Arthus, 32
Thomas, 22
Madolfe, 53

Deine Aufgabe:

  1. Lies die Datei codes/Ritter.txt mit Python ein
  2. Speichere sie in ein Dictionary (z.B. ritter_dict) mit dem Namen der Ritter als Schlüssel und dem Alter als Wert. Tipp: Du kannst die Einträge mit der split()-Funktion aufsplitten. Das Trennzeichen ist hier das Komma split(',')
  3. Gib die Ergebnisse in einer for-Schleife (foreach) mit dem print-befehl aus z.B. "Ritter " + ritter + " ist " + alter + " Jahre alt"

Hier kannst du deinen Code reinschreiben:

Code-Aufgabe - Lösung:

Wenn du nicht weiterkommst, findest du hier die Komplettlösung zu der Aufgabe. Du kannst den folgenden Code in den Online-Editor kopieren & einfügen, um ihn zu testen.

[lp_spoiler title="Spoiler - Lösung anzeigen"]

file = open("codes/Ritter.txt", 'r')

ritter_dict = dict()

for line in file:
    ritter = line.split(',')
    ritter_dict[ritter[0]] = ritter[1]

file.close()

for ritter,alter in ritter_dict.items():
    print("Der Ritter " + ritter + " ist " + alter + "Jahre alt")
Code ausprobieren ×

[/lp_spoiler]

Zusammenfassung

In der vorliegenden Lektion haben wir gesehen, wie man aus Dateien liest und in Dateien schreibt. Dies ist sehr nützlich, sobald man entweder output produzieren will oder größere Mengen an Daten liest. Beim Handling externer Daten ist es wichtig, die Datei im richtigen Modus zu öffnen.

Wir hoffen, du hattest Spaß und wir sehen uns in der nächsten Lektion wieder.