Die Python-Funktion open() öffnet eine Datei und liefert ein File-Objekt zum Lesen oder Schreiben. Sie ist das zentrale Werkzeug für sämtliche Datei-I/O in Python — Text wie Binär, lokal wie über Pipes. Mit dem with-Statement (Context Manager) werden Dateien automatisch und exception-sicher geschlossen.
Einleitung
open() ist Pythons Standard-Eingang zum Dateisystem. Sie nimmt mindestens einen Pfad und liefert ein File-Objekt, das die Methoden read(), readline(), readlines(), write(), writelines(), seek() und close() bereitstellt.
Die wichtigsten Parameter:
mode:r(lesen, Default),w(überschreiben),a(anhängen),x(exklusiv erstellen). Mitbergänzt → Binärmodus (rb,wb). Mit+→ Lese- und Schreibzugriff (r+,w+).encoding: Beim Textmodus (Default) kritisch — am besten immer explizitencoding="utf-8"setzen, sonst nutzt Python das System-Default und macht plattformabhängig unerwartete Konvertierungen.newline: Steuert die Zeilenumbruch-Konvertierung (""schaltet sie aus, nützlich beim CSV-Modul).
Best Practice: open() immer mit with aufrufen — nie mit nacktem Aufruf, weil sonst bei Exceptions Datei-Handles offen bleiben.
Syntax
open(file, mode="r", buffering=-1, encoding=None, errors=None,
newline=None, closefd=True, opener=None)file Pfad als String oder Path-Objekt — oder ein offenes Datei-Descriptor (int).
mode Modus-String, Default "r". Kombinationen aus r/w/a/x, + (Lese-/Schreibzugriff), b (Binär), t (Text, default).
encoding Text-Encoding, z. B. "utf-8". Default ist plattformabhängig — explizit setzen!
newline Steuerung der Zeilenumbruch-Konvertierung. "" → keine Konvertierung (CSV-Empfehlung).
errors Verhalten bei Encoding-Fehlern: "strict" (default), "replace", "ignore".
Rückgabewert
Ein File-Objekt — Subtyp von io.TextIOBase (Textmodus) oder io.BufferedReader/Writer (Binärmodus).
Beispiele
Textdatei lesen mit Context Manager
Der with-Block schließt die Datei automatisch — auch wenn im Inneren eine Exception fliegt:
with open("data.txt", encoding="utf-8") as f:
inhalt = f.read()
print(len(inhalt), "Zeichen geladen")Zeilenweise iterieren
Direkte Iteration über das File-Objekt ist speicher-effizient — auch bei Multi-Gigabyte-Dateien:
with open("logfile.txt", encoding="utf-8") as f:
for nr, line in enumerate(f, 1):
if "ERROR" in line:
print(f"Zeile {nr}: {line.rstrip()}")Datei überschreiben
Mit mode="w" wird eine bestehende Datei vollständig ersetzt — Vorsicht ist geboten:
with open("report.txt", "w", encoding="utf-8") as f:
f.write("Erste Zeile\n")
f.write("Zweite Zeile\n")Anhängen statt überschreiben
mode="a" (append) erhält den bestehenden Inhalt und schreibt nur am Ende:
with open("audit.log", "a", encoding="utf-8") as f:
f.write("2026-05-03 10:00 — User login\n")Binärmodus für Bytes
Bei Bildern, Archiven oder kompakten Datenformaten muss man im Binärmodus (b) arbeiten — kein Encoding nötig:
with open("bild.png", "rb") as f:
magic = f.read(8)
print(magic == b"\x89PNG\r\n\x1a\n")Praktische Beispiele
Datei nur erstellen, wenn sie nicht existiert
mode="x" (exclusive) verhindert das versehentliche Überschreiben — wirft FileExistsError bei Konflikt:
try:
with open("config.json", "x", encoding="utf-8") as f:
f.write("{}\n")
print("Konfiguration angelegt")
except FileExistsError:
print("Datei existiert bereits — nichts geändert")Streaming einer großen Datei mit fester Block-Größe
Mit iter() und einer Lambda-Funktion lassen sich Binärdateien in fester Block-Größe lesen — ohne den ganzen Inhalt in den Speicher zu laden:
import hashlib
sha = hashlib.sha256()
with open("big.bin", "rb") as f:
for block in iter(lambda: f.read(65_536), b""):
sha.update(block)
print(sha.hexdigest())CSV mit korrekter Newline-Behandlung
Das csv-Modul verlangt newline="" — sonst werden Zeilenumbrüche in Quoted-Feldern falsch interpretiert:
import csv
with open("data.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerow(["name", "alter"])
writer.writerow(["Michael", 34])Praktische Hinweise
- Immer
withnutzen — kein expliziterclose()-Aufruf nötig, exception-sicher. encoding="utf-8"immer explizit angeben — sonst wird auf manchen Plattformencp1252benutzt und das brennt früher oder später.- Binär (
b) für Bytes, Text (default) fürstr. Vermischen führt zuTypeError. pathlib.Path.open()ist eine objekt-orientierte Alternative mit gleichen Optionen.- Verwandte Module:
csv,json,pickle,gzip,pathlib,io.StringIO/BytesIO(in-memory File-Objekte).