Empfohlene Unterrichtsinhalte als Vorbereitung für dieses Thema: 01-03 (Variablen), 02-01 (Strings), 02-02 (Listen), 03-02 (Bedingungen), 03-03 (Schleifen), 04-02 (Dateien schreiben)
Unser Ziel beim Programmieren ist es, Logik von Inhalten zu trennen. Deshalb schreiben wir zum Beispiel Schleifen, die automatisch eine ganze Sequenz von Elementen verarbeiten, statt per Hand die Verarbeitung jedes einzelnen Elements zu programmieren.
Für eine noch stärkere Trennung zwischen Logik und Inhalt können wir sorgen, indem wir Inhalte aus einer Datei lesen.
Um eine existierende Datei in unserem Pythoncode zu öffnen, verwenden wir den Code unten. Wie schon beim Schreiben von Dateien geben wir auch hier wieder das Encoding an, das für die Darstellung der Zeichen zuständig ist.
filename = "secrets.txt"
with open(filename, "r", encoding="utf8") as infile:
for line in infile:
print(line)
#######################################################
# OPTIONAL/HINWEIS #
# Falls die Datei nicht gefunden wird, ist sie #
# wahrscheinlich nicht im gleichen Ordner gespeichert,#
# in dem der Code gerade ausgeführt wird. #
# Die folgenden zwei Zeilen könnt ihr an #
# den Anfang eures Codes kopieren, um herauszufinden, #
# in welchem Ordner der Code ausgeführt wird (und #
# wo demnach die Datei gesucht wird): #
#######################################################
import os
print(os.getcwd())
Die Variable filename
ist ein String, in den wir den Pfad zur Datei eintragen.
Die Zeile, die mit with
beginnt, öffnet unsere Datei mit dem Befehl open()
. Der Befehl hat zwei Argumente, die wir in den Klammern auflisten:
"r"
wie read
(lesen).Die Zeilen unter with
sind eingerückt. Nach dem eingerückten Block wird die Datei automatisch geschlossen. Wir können dann nicht mehr auf ihren Inhalt zugreifen!
Innerhalb des with
-Blocks im Beispiel ist eine Schleife zu sehen, mit der wir durch den Inhalt der Datei iterieren. Dabei wird jede Zeile als String aus der Datei gelesen und kann mit unseren verfügbaren Stringmethoden weiterverarbeitet werden.
Die allgemeine Form des Codes zum Öffnen einer Datei im Lesemodus sieht so aus:
with open(<dateiname>, "r") as <dateivariable>:
for <laufvariable> in <dateivariable>:
...
Wie man sieht, können Einrückungsblöcke ineinander verschachtelt werden. Man rückt dann die eingebetteten Blöcke einfach etwas weiter ein. Wichtig ist, dass alle Zeilen auf der gleichen logischen Ebene genau die gleiche Einrückung haben.
with open(...) as infile:
können wir Dateien öffnen.with open
-Blocks können wir mit einer Schleife durch die Zeilen einer Datei iterieren.