Dateien
Python bietet uns auch die Möglichkeit, Dateien zu lesen und zu schreiben. Um eine Datei lesen oder ändern zu können, müssen wir sie zuerst öffnen und zuletzt wieder schließen.
Grundlegendes Beispiel: eine Datei zeilenweise auslesen
[Bearbeiten]Ein einfaches Beispiel zeigt uns, wie es geht. Voraussetzung ist eine Datei namens test.txt im selben Verzeichnis wie die Python-Datei mit folgendem Inhalt:
Dies ist ein Satz in einer Datei.
Dies ist die zweite Zeile in einer Datei.
datei = open("test.txt", "r")
for zeile in datei:
print(zeile, end="")
datei.close()
Oder:
with open("test.txt", "r") as datei: # so wird die Datei am Ende dieses Blocks automatisch geschlossen
for zeile in datei:
print(zeile, end="")
=========== RESTART: D:/AA_Projekte/Programmierung/Python/dateien.py ===========
Dies ist ein Satz in einer Datei.
Dies ist die zweite Zeile in einer Datei.
open
[Bearbeiten]Wir sehen also, dass eine Datei mit der Funktion open() (englisch für "öffnen") geöffnet wird. Sie gibt ein file-Objekt zurück, das einer Variablen, zum Beispiel "datei", zugewiesen wird; der Typ des file-Objekts hängt davon ab, welcher Modus (mode) angegeben wurde.
Die wichtigsten Parameter der Funktion open sind file und mode; file ist ein String, der den Dateinamen und optional den Dateipfad angibt; mode ist ebenfalls ein String und gibt an, wie die Datei geöffnet werden soll, also zum Lesen oder Schreiben und als Text- oder Binärdatei. Folgende Optionen gibt es:
| Zeichen | Bedeutung | Typ des file-Objekts |
|---|---|---|
| 'r' | zum Lesen öffnen (default) | |
| 'w' | zum Schreiben öffnen, bereits vorhandener Inhalt wird gelöscht | |
| 'x' | neue Datei erstellen, Fehler FileExistsError, wenn die Datei bereits existiert | |
| 'a' | zum Schreiben öffnen, neuer Inhalt wird an den bereits vorhandenen angehängt | |
| 'b' | binärer Modus | BufferedReader bzw. BufferedWriter |
| 't' | Text-Modus (default) | TextIOWrapper |
| '+' | zum Lesen und Schreiben öffnen | BufferedRandom |
Ohne Angabe von "mode" wird "rt" angenommen.
Mit mode='w+b' wird bereits vorhandener Inhalt gelöscht, mit mode='r+b' bleibt er erhalten.
close
[Bearbeiten]Das file-Objekt stellt einige Methoden bereit, darunter auch eine zun Schließen der Datei: close(). Im Beispiel ist das dann datei.close().
Pfade und Fehler
[Bearbeiten]Was passiert aber, wenn die Datei, die wir öffnen wollen, nicht vorhanden ist? Python wirft uns einen FileNotFoundErroraus:
=========== RESTART: D:\AA_Projekte\Programmierung\Python\dateien.py ===========
Traceback (most recent call last):
File "D:\AA_Projekte\Programmierung\Python\dateien.py", line 1, in <module>
datei = open("test.txt", "r")
^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
Mit os.path.exists kann geprüft werden, ob die angegebene Datei vorhanden ist:
import os.path
os.path.exists("test.txt")
