Python: Dateien
Willemers Informatik-Ecke

Öffnen und Schließen der Datei

Im ersten Schritt wird die Datei mit der Funktion open() geöffnet. Im Erfolgsfall liefert sie ein Dateiobjekt zurück, das für die weiteren Dateioperationen verwendet wird.
Datei = open("dateiname", "w")
Der erste Parameter der Funktion open() ist eine Zeichenkette, die den Dateinamen enthält. Der zweite Parameter bezeichnet die geplanten Operationen und ist eine Zeichenkette, die eine Kombination folgender Inhalte enthalten kann:
Option Wirkung
r Datei lesen
w Datei schreiben
a An Datei anhängen
r+ Datei lesen und schreiben
w+ Datei lesen und schreiben
a+ Datei lesen und schreiben
b Datei im Binärmodus bearbeiten
Die geöffnete Datei muss nach dem Ende der Arbeiten geschlossen werden. Dazu dient die Funktion close(). Sie hat keine weiteren Parameter.

Das folgende Programm zeigt den grundsätzlichen Ablauf von Dateioperationen, indem es irgendeinen Unfug in eine Datei namens dateiname schreibt.

try:
    Datei = open("dateiname", "w")
    Datei.write("Irgendein Unfug.\n")
    Datei.close();
except:
    print("Fehler aufgetreten")

Sequentielles Schreiben und Lesen

Wie Sie sehen, schreibt die Funktion write() die übergebenen Parameter in die Datei, über deren Objekt sie aufgerufen wurde.

Zum Lesen der Datei können Sie sich Zeile für Zeile aus dem Datei-Objekt liefern lassen.

#!/usr/bin/python
try:
    Datei = open("dateiname")
    for Zeile in Datei:
       print(Zeile)
    Datei.close()
except:
    print("Datei kann nicht gelesen werden.")
readlines() liest in eine Liste
Bei kleineren Textdateien kann die Funktion readlines() verwendet werden, die den Inhalt einer Datei komplett als Liste aller Zeilen zurückgibt.
#!/usr/bin/python
try:
    Datei = open("dateiname")
    ZeilenListe = Datei.readlines()
    for Zeile in ZeilenListe:
       print(Zeile)
    Datei.close()
except:
    print("Datei kann nicht gelesen werden.")
Zeichensatz-Kodierung
Bei Textdateien kann es natürlich vorkommen, dass sie nicht in der gleichen Kodierung geschrieben wurde, die Ihre Programm erwartet. Um das anzupassen, können Sie die Methode decode() aufrufen.
Datei = Datei.decode('utf-8') 
Falls Sie es mit Windows-Dateien zu tun haben, ist als Parameter iso-8859-15 zu verwenden.
Binärdateien
Textdateien werden durch Zeilenumbrüche getrennt. Binärdaten sind dagegen in der Regel blockweise organisiert. Um Binärdateien zu lesen, sollte ein b in den Optionsparameter der Funktion open() eingetragen werden. Ansonsten werden eventuell die Zeilenendezeichen uminterpretiert, die in binären Dateien aber vielleicht gar keine Zeilenendezeichen darstellen. Das würde dann zu schwer lokalisierenden Fehlern führen.

Die Blöcke einer Datei müssen nicht sequentiell gelesen werden, sondern Sie können mit der Funktion seek() eine Position in der Datei anfahren und dort einen Datenblock mit der Funktion read() auslesen.

Der erste Parameter Der Funktion seek() ist die Zielposition in Bytes gemessen. Der zweite Parameter bestimmt, wie die Zielposition ermittelt wird. Ist der zweite Parameter 0, rechnet sich der Wert ab dem Dateianfang. Ist er 1, wird die aktuelle Position verwendet. Mit dem Wert 2 wird rückwärts ab dem Dateiende berechnet.

Funktionen