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). Mit b ergänzt → Binärmodus (rb, wb). Mit + → Lese- und Schreibzugriff (r+, w+).
  • encoding: Beim Textmodus (Default) kritisch — am besten immer explizit encoding="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

Python Syntax
open(file, mode="r", buffering=-1, encoding=None, errors=None,
     newline=None, closefd=True, opener=None)
Parameter
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:

Python Beispiel
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:

Python Beispiel
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:

Python Beispiel
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:

Python Beispiel
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:

Python Beispiel
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:

Python Beispiel
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:

Python Beispiel
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:

Python Beispiel
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 with nutzen — kein expliziter close()-Aufruf nötig, exception-sicher.
  • encoding="utf-8" immer explizit angeben — sonst wird auf manchen Plattformen cp1252 benutzt und das brennt früher oder später.
  • Binär (b) für Bytes, Text (default) für str. Vermischen führt zu TypeError.
  • 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).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht