- 1 Section
- 10 Lessons
- unbegrenzt
- Python Grundlagen10
- 1.1Python-Grundlagen: Installation, REPL, erstes Skript
- 1.2Variablen, Datentypen, Typumwandlung
- 1.3Kontrollstrukturen: if, elif, else
- 1.4Schleifen: for, while, range
- 1.5Listen, Tupel, Dictionaries, Sets
- 1.6Funktionen: def, Parameter, return
- 1.7Fehlerbehandlung: try-except-finally
- 1.8Strings: Methoden, Formatierung, f-Strings
- 1.9Dateien lesen und schreiben
- 1.10Praxisprojekt: Kleines Python-Programm von A bis Z
Dateien lesen und schreiben
Dateien sind das Tor zur Außenwelt. Sobald dein Programm Daten behalten soll – über das Ende der Ausführung hinaus – brauchst du Dateien. Konfigurationen einlesen, Berichte schreiben, CSV-Daten verarbeiten, Logs anlegen, JSON von einer API speichern – das ist Brot-und-Butter-Arbeit für jeden Programmierer.
Python macht es dabei extra einfach: eine einzige Funktion (open) und ein wunderschönes Sprach-Konstrukt (with) reichen für 95% aller Datei-Operationen. In dieser Lektion lernst du wie man Text- und Binärdateien liest und schreibt, sicher mit Ressourcen umgeht und die wichtigsten Spezialformate (CSV, JSON) verarbeitet.
1) Das Grundprinzip: open, lesen/schreiben, close
Eine Datei zu nutzen folgt immer dem gleichen Muster: öffnen → benutzen → schließen. Wenn du das Schließen vergisst, bleiben Datei-Handles im System hängen (Resource Leak) und im schlimmsten Fall werden Daten nicht auf die Festplatte geschrieben (sie hängen im Puffer):
with-Statement, das wir gleich kennenlernen. Es garantiert das Schließen – auch wenn ein Fehler auftritt.2) Das with-Statement: niemals close vergessen
Das with-Statement ist Pythons Lösung für „Ressourcen die nach Gebrauch freigegeben werden müssen". Du öffnest die Datei in einem with-Block – Python kümmert sich um den Rest, auch wenn ein Fehler auftritt:
inhalt = f.read()
# Wenn hier ein Fehler kommt,
# wird close NIE aufgerufen!
f.close()
inhalt = f.read()
# Hier ist die Datei garantiert
# geschlossen – Fehler oder nicht.
with-Statement ist ein Context Manager: beim Eintreten wird ein Setup-Code ausgeführt (Datei öffnen), beim Verlassen ein Teardown-Code (Datei schließen) – egal ob durch normales Ende, return oder Exception. Genau wie finally aus Lektion 7, aber kompakter. Faustregel: Datei-Operationen IMMER mit with.3) Die Datei-Modi im Überblick
Der zweite Parameter von open() entscheidet was du mit der Datei machen kannst. Achtung: "w" löscht den existierenden Inhalt – das ist eine häufige Falle:
\r\n auf Windows, \n auf Mac/Linux). Beim Binär-Modus passiert das nicht. Wichtig: beim Lesen von Textdateien IMMER die Kodierung angeben – sonst gibt's mit Umlauten Probleme: open("datei.txt", "r", encoding="utf-8"). UTF-8 ist heute Standard.4) Eine Datei lesen – drei Wege
Es gibt drei verschiedene Arten Inhalte aus einer Datei zu holen. Welche du nutzt hängt davon ab WAS du brauchst und WIE GROSS die Datei ist:
Bei einer 10-MB-Logdatei: read() lädt 10 MB in den Speicher. readlines() auch (als Liste). Die for-Schleife liest dagegen nur jeweils eine Zeile ein und gibt sie wieder frei – auch eine 10-GB-Datei klappt damit. Für große Dateien also IMMER die Schleifen-Variante. Mehr zum Thema „Streams" und Generatoren in K41b.
5) Schreiben in eine Datei
Schreiben funktioniert mit .write() oder .writelines(). Wichtig: write fügt KEINE Zeilenumbrüche automatisch hinzu – du musst sie selbst setzen wenn du Zeilen willst:
Stilfrage: "\n".join(...) ist oft eleganter als manuelles Anhängen von \n – siehe Strings-Lektion: f.write("\n".join(namen)).
6) Mehrere Dateien gleichzeitig
Klassisches Beispiel: eine Datei lesen und in eine andere schreiben (z.B. filtern, transformieren). Du kannst beide gleichzeitig im with-Block öffnen:
Der Backslash am Zeilenende erlaubt das Aufteilen einer langen Zeile. Beide Dateien werden am Ende automatisch geschlossen.
7) CSV-Dateien lesen mit dem csv-Modul
CSV (Comma-Separated Values) ist ein simples Tabellen-Format, das von Excel, Google Sheets und Datenbank-Exporten verwendet wird. Python hat dafür ein eingebautes Modul. Klar, du könntest auch einfach mit .split(",") arbeiten – aber das geht schief sobald Werte selbst Kommas enthalten oder mit Anführungszeichen quotiert sind:
Für ernsthafte Datenanalyse mit großen CSV-Dateien (Millionen Zeilen) lohnt sich später pandas – siehe K41b.
8) JSON: das Web-Datenformat
JSON (JavaScript Object Notation) ist das Standardformat für API-Antworten, Konfig-Dateien und Daten-Austausch. Die Struktur passt zu Python-Dicts und -Listen – die Konvertierung ist mit dem eingebauten json-Modul ein Einzeiler:
Vier Funktionen merken: json.dump (in Datei), json.dumps (in String – mit s wie String), json.load (aus Datei), json.loads (aus String). Bei deutschen Umlauten ensure_ascii=False nicht vergessen, sonst werden sie als \u00e4 kodiert.
9) Pfade richtig handhaben – pathlib
Datei-Pfade als Strings zu basteln führt zu Bugs (Windows verwendet \, Linux /). Modernes Python nutzt das pathlib-Modul – objektorientierte Pfade die auf allen Systemen funktionieren:
10) Robustes Datei-Handling – immer Fehler einplanen
Datei-Operationen schlagen oft fehl: Datei fehlt, keine Rechte, Festplatte voll, falsche Kodierung. Wer Datei-Code ohne try-except schreibt, baut sich Stolpersteine ein:
Zusammenfassung
open(pfad, modus, encoding="utf-8") öffnet Datei. Immer mit with – Datei schließt automatisch. Modi: "r" lesen (Default), "w" schreiben (überschreibt!), "a" anhängen, "x" exklusiv erstellen, +"b" für binär. Lesen: .read() (alles), .readlines() (Liste), for line in f: (speichersparend). Schreiben: .write(text) – \n manuell setzen. Spezial-Module: csv für Tabellen (DictReader/DictWriter), json mit dump/load/dumps/loads. Pfade modern: pathlib.Path mit /-Operator und read_text/write_text. IMMER encoding="utf-8" und FileNotFoundError/PermissionError mit try-except behandeln.
