Aus dem Kurs: Grundlagen der Programmierung: Basiswissen
So funktioniert der Dateizugriff
Häufig möchten wir, dass ein Computerprogramm eine Datei auf der Festplatte öffnet oder auch eine eigene Datei dort ablegt. Das ist etwas, was mit dem standardmäßigen JavaScript nicht so einfach programmiert werden kann. Aus Sicherheitsgründen ist das für JavaScript einfach nicht vorgesehen. Das liegt daran, dass JavaScript eine Programmiersprache für Webseiten ist. Und wir wollen nicht, dass eine Webseite einfach so auf unsere Festplatte schreiben kann. Dennoch ist der Dateizugriff innerhalb der Programmierung ein wichtiges Thema. Aus diesem Grund werde ich Ihnen hier zeigen, wie das Datenlesen und das Datenschreiben mit der Programmiersprache Python, einer derzeit sehr populären Programmiersprache, aussehen würde. Um ein Verständnis für den Algorithmus, also die Struktur des Dateizugriffes zu erhalten, zeige ich Ihnen jedoch erst einmal den Pseudocode. Als Erstes benötige ich den Dateinamen und eine Möglichkeit, die Datei zu öffnen. Als Zweites lese ich den Inhalt der Datei ein, z.B. Zeile für Zeile, bis keine Zeilen mehr übrig sind. Als Letztes muss ich die Datei auch wieder schließen. In Python sieht das Ganze nun so aus. Als Erstes öffne ich die Datei myfile.txt. Auf diese kann ich mithilfe der Variable data zugreifen. myfile.txt ist dabei nur der Name der Datei und steht somit in Anführungszeichen. Das darauffolgende r bezieht sich darauf, dass ich nur lesend zugreifen möchte. Die Datei myfile sollte in dem gleichen Ordner liegen wie das auszuführende Programm. Falls es nicht der Fall ist, müsste ich entsprechend den Pfad zum Speicherort der Datei angeben. Generell gibt es verschiedene Modi. Den Schreibmodus kennzeichne ich mit w wie write, für Lese- und Schreibmodus verwende ich r+. Wenn ich eine Datei nur im Lesemodus öffne, können andere Nutzer und Nutzerinnen diese Datei gleichzeitig bearbeiten. Wenn ich sie dagegen im Schreibmodus öffne, kann niemand anderes mehr auf diese Datei schreibend zugreifen. Ein einfacher Lesemodus hat den Vorteil, dass er weniger Ressourcen verbraucht, er ist schneller und an sich auch sicherer als der Schreibmodus. Mit der nächsten Zeile sage ich, dass ich die Daten aus der Datei einlesen möchte. Das mache ich in Python mit der Funktion read. Es gibt noch readline, mit diesem Befehl würde ich nur eine Zeile einlesen. Mit print lasse ich mir den Inhalt der Variable data ausgeben, die ja den Inhalt der Datei myfile enthält. Als Letztes schließe ich die Datei mit close wieder. In Python kann ich Dateien aber nicht nur einlesen, sondern auch schreiben. Wie beim Einlesen öffne ich zuerst die Datei, in die ich schreiben will, jedoch dieses Mal im Schreibmodus w, und speichere sie in der Variable data. Nun möchte ich z.B. den Text "Hello World" in die Datei schreiben. Das kann ich mit der Funktion write machen. Ich kann der Funktion write auch einfach eine Variable übergeben, die auf irgendwelche Daten verweist. So wie der Code hier steht, überschreibt "Hello World." alles, was aktuell in der Datei zu finden ist. Möchte ich lediglich Daten an schon vorhandenen Inhalt anhängen, öffne ich die Datei nicht im Schreibmodus, sondern im Append-Modus, indem ich statt 'w' 'a' schreibe. Als Letztes schließe ich die Datei wieder. Wie sollten Sie jetzt vorgehen, wenn Sie ganz große Datenmengen haben, die z.B. nicht in eine Variable passen oder Binärdaten wie z.B. ein Bild oder Video, in denen gar keine einzelnen Zeichen enthalten sind? Das Vorgehen ist hierbei ähnlich. Sie öffnen ein Datei und gehen sie zeilenweise durch. Das machen Sie so lange, bis keine Zeilen mehr vorhanden sind. Anschließend dürfen Sie nicht das Schließen der Datei vergessen. Wenn Sie einen Datenstream, also einen fortlaufenden Strom von Daten haben, z.B. in Form eines Video- oder Audiostreams, existiert keine Datei, auf die Sie zugreifen können. Deshalb öffnen Sie dafür den Stream und lesen die Daten aus dem Stream Zeile für Zeile ein. Da gibt es quasi kein Ende. Beenden Sie den Stream, wenn Sie genug haben und fahren Sie mit dem normalen Programm fort. Es gibt also verschiedene Arten und Weisen, wie Sie mit Programmiersprachen auf Dateien und auf Streams zugreifen können. Aber im Prinzip ist es immer dasselbe: Datei öffnen, Daten lesen und schreiben und am Ende, ganz wichtig, die Datei auch wieder schließen, damit sie von anderen Programmen geöffnet werden kann.