Python - Syntax - Dateibearbeitung I
Aus Dateien lesen
Eine Datei ist ein Bytestrom (also eine Folge von einzelnen Bytes wie Perlen auf einer Kette). Er ist mit einem Namen verknüpft und wird vom Betriebssystem im Dateibaum aufgehoben. Programme können beim Betriebssystem Zugriff darauf verlangen, um den Bytestrom zu lesen oder zu verändern. Solche Programme sind z.B. Editoren oder auch der Python-Interpreter, wenn er unsere Scripts liest, um sie abzuarbeiten.
Was andere können, können wir schon lange! Das Bearbeiten von Dateien ist recht einfach, gliedert es sich doch in nur drei Schritte:
- Öffnen der Datei = dem Betriebssystem sagen, welche Datei man haben will (mit Namen) und was man mit ihr vorhat (lesen, neu schreiben oder verändern). Man bekommt ein Dateiobjekt zurück, das dann im weiteren Verlauf dazu dient, auf die entsprechende Datei zuzugreifen.
- Bearbeiten der Datei = lesen oder schreiben. Dabei geht man davon aus, dass immer nur an einer einzigen Stelle gearbeitet werden kann. Man kann sich das vorstellen, als ob es dorthin einen Zeiger gäbe. Immer, wenn ein Byte geschrieben oder gelesen wurde, wird der Zeiger automatisch weitergestellt auf das nächste zu schreibende oder zu lesende Byte.
- Schließen der Datei = Rückspeichern aller Änderungen auf den Datenträger. Das sollte man immer tun; wenn es Probleme gibt, hat man wenigstens den letzten Stand gerettet.
Hinein ins Praktische. Am besten öffnet man zuerst einmal eine Datei zum Lesen. Am Besten eine, die es schon gibt, z.B. diese.
diese = open("dateien1.py", "r")
Das öffnet die Datei "dateien1.py" zum Lesen ("r"ead). Über das Dateiobjekt "diese" kommen wir nun an alles ran. Nun Lesen. Zuerst zeichenweise:
while 1:
zeichen = diese.read(1)
Aus der Datei ein Byte lesen und in "zeichen" ablegen. Das klappt nur, wenn noch ein Zeichen da war, die Datei also nicht am Ende. Ansonsten hat "zeichen" den Wert "" und der steht für "falsch". Darauf basiert die Abfrage:
if not zeichen:
break # Raus aus der Schleife
andernfalls ausgeben (ohne Zeilenwechsel, deswegen das Komma).
print zeichen,
Am Schluss noch die Datei schließen.
diese.close()
In Dateien schreiben
Beispiel: Wir fertigen eine Kopie unserer Datei an.
diese = open("dateien1.py", "r")
kopie = open("dateien1.kopie", "w")
Wir öffnen eine zweite Datei mit dem Namen "dateien1.kopie" zum Schreiben ("w"rite). Wenn sie noch nicht existiert, wird sie neu angelegt. Ansonsten wird eine bestehende Datei überschrieben. Nun die gleiche Schleife wie vorher, nur dass nicht auf den Bildschirm (mit print) geschrieben wird, sondern in die neue Datei.
while 1:
zeichen = diese.read(1)
if not zeichen:
break
kopie.write(zeichen)
diese.close()
kopie.close()
print 'Kopie erstellt. Bitte mit Editor ansehen unter "dateien1.kopie"'
Einige Bemerkungen:
- "read" liest soviele Bytes, wie angegeben (sofern vorhanden). Gibt es nicht mehr soviele, kriegt man halt, was noch da ist. Wird der Parameter ganz weggelassen, versucht der Interpreter, die ganze Datei in eine einzige Zeichenkette zu lesen, was insbesondere bei langen Dateien überhaupt nicht empfehlenswert ist. Mit "read" werden übrigens auch Zeilenwechselzeichen gelesen und wie normale ASCII-Zeichen behandelt.
- "write" muss man nicht sagen, wieviel es schreiben soll. Es bekommt eine Zeichenkette und die schreibt es, egal wie lang. Dass unsere Zeichenkette "zeichen" hieß und von daher den Eindruck eines einzelnen Zeichen machte, hat der Interpreter offenbar nicht verstanden. "write" kann nur Zeichenketten schreiben. Andere Datenobjekte müssen erst in solche gewandelt werden.
Der Bildungsserver Berlin-Brandenburg ist ein Service des Landesinstituts für Schule und Medien Berlin-Brandenburg im Auftrag der Senatsverwaltung für Bildung, Jugend und Familie (Berlin) und des Ministeriums für Bildung, Jugend und Sport Land Brandenburg.