6 Dateien
Bisher haben wir besprochen, wie Sie Instanzen diverser Datentypen erstellen und mit ihnen arbeiten. Darüber hinaus wissen Sie bereits, wie der Programmfluss durch Kontrollstrukturen beeinflusst werden kann. Es ist an der Zeit, dieses Wissen sinnvoll zu verwenden und Sie in die Lage zu versetzen, komplexere Programme zu schreiben. Dieses Kapitel widmet sich den Möglichkeiten zur Ein- bzw. Ausgabe von Daten. Das bezieht sich insbesondere auf das Lesen und Schreiben von Dateien, was zum Standardrepertoire eines Programmierers gehört.
Bevor wir uns konkret auf das Lesen und Schreiben von Dateien in Python stürzen, werden Sie im folgenden Abschnitt die dafür notwendigen Grundlagen kennenlernen.
6.1 Datenströme
Unter einem Datenstrom (engl. data stream) versteht man eine kontinuierliche Folge von Daten. Dabei werden zwei Typen unterschieden: Von eingehenden Datenströmen (engl. downstreams) können Daten gelesen und in ausgehende Datenströme (engl. upstreams) geschrieben werden. Bildschirmausgaben, Tastatureingaben sowie Dateien und Netzwerkverbindungen werden als Datenstrom betrachtet.
Abbildung 6.1 veranschaulicht das Konzept der Datenströme anhand eines Beispiels, in dem ein Programm Daten von einem eingehenden Strom empfängt, aus diesen ein Ergebnis berechnet und das Ergebnis auf einem ausgehenden Strom ausgibt. Sie können sich beispielsweise vorstellen, dass das Programm eine Datei ausliest und jedes zweite in der Datei enthaltene Wort auf dem Bildschirm ausgibt.
Es gibt zwei Standarddatenströme, die Sie bereits verwendet haben, ohne es zu wissen: Sowohl die Ausgabe eines Strings auf dem Bildschirm als auch eine Benutzereingabe sind nichts anderes als Operationen auf den Standardeingabe- bzw. -ausgabeströmen stdin und stdout. Auf den Ausgabestrom stdout kann mit der eingebauten Funktion print geschrieben und von dem Eingabestrom stdin mittels input gelesen werden.
Einige Betriebssysteme erlauben es, Datenströme im Text- und Binärmodus zu öffnen. Der Unterschied besteht darin, dass im Textmodus bestimmte Steuerzeichen berücksichtigt werden. So wird ein im Textmodus geöffneter Strom beispielsweise nur bis zum ersten Auftreten des sogenannten EOF-Zeichens gelesen, das das Ende einer Datei (engl. end of file) signalisiert. Im Binärmodus hingegen wird der vollständige Inhalt des Datenstroms eingelesen.
Als letzte Unterscheidung gibt es Datenströme, in denen man sich beliebig positionieren kann, und solche, in denen das nicht geht. Eine Datei stellt zum Beispiel einen Datenstrom dar, in dem die Schreib-/Leseposition beliebig festgelegt werden kann. Beispiele für einen Datenstrom, in dem das nicht funktioniert, sind der Standardeingabestrom (stdin) oder eine Netzwerkverbindung.