Ö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 |
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
- daten = datei.read()
Liest daten aus der Datei datei. Optional kann als Parameter übergeben werden, wie viele Bytes maximal zu lesen sind. - zeile = datei.readline()
Liest eine Zeile zeile aus der Datei datei. Optional kann als Parameter übergeben werden, wie viele Bytes maximal zu lesen sind. - zeilen = datei.readlines()
Liest eine Liste von Zeilen aus der Datei. Optional kann als Parameter übergeben werden, wie viele Bytes maximal zu lesen sind. - datei.write(text)
Schreibt die Zeichenkette text in die Datei datei. - datei.writelines(textliste)
Schreibt die Liste von Zeichenketten textliste in die Datei datei. - datei.tell()
Liefert die aktuelle Position innerhalb der Datei. - datei.seek(pos)
Positioniert den Dateizeiger an die Position pos. In einem zweiten Parameter wird die Referenz angegeben: 0 ab Dateianfang, 1 ab der aktuellen Position und 2 rückwärts ab Dateiende. - datei.flush()
Vor allem die Schreibdaten werden aus Effizienzgründe im Hauptspeicher zwischengelagert. Die Funktion flush() schreibt alle Puffer in die Datei. - datei.close()
Schließt die Datei. - status = datei.closed
Ermittelt, ob die Datei geschlossen ist. - datei.mode
Liefert zurück, in welchem Modus die Datei geöffnet wurde - datei.name
Liefert den Dateinamen zurück.