Python: Dateien lesen und schreiben

PythonBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie den grundlegenden Prozess des Lesens aus und Schreibens in Dateien in Python. File I/O (Input/Output) ist eine entscheidende Fähigkeit für jeden Programmierer, da sie es Ihren Programmen ermöglicht, Daten dauerhaft zu speichern, Konfigurationen zu lesen und mit dem Dateisystem zu interagieren.

Wir konzentrieren uns auf die Verwendung der with-Anweisung, welche die moderne und empfohlene Methode zur Handhabung von Dateien in Python ist. Sie stellt sicher, dass Dateien automatisch geschlossen werden, selbst wenn Fehler auftreten, wodurch Ressourcenlecks verhindert werden.

Im Laufe dieses Labs werden Sie:

  • Den grundlegenden File I/O-Prozess verstehen.
  • Dateien mit verschiedenen Methoden öffnen und lesen (read(), readlines() und Iteration).
  • Neuen Inhalt in Dateien schreiben und Inhalt an bestehende Dateien anhängen.

Alle Operationen werden innerhalb des LabEx WebIDE durchgeführt. Lassen Sie uns beginnen.

Der Prozess des Datei-Lesens und -Schreibens

In diesem Schritt lernen Sie den grundlegenden Prozess der Datei-I/O (Input/Output) in Python und die Wichtigkeit der with-Anweisung kennen.

Um in Python aus einer Datei zu lesen oder in eine Datei zu schreiben, befolgen Sie im Allgemeinen drei Schritte:

  1. Öffnen Sie die Datei.
  2. Lesen Sie aus der Datei oder schreiben Sie in die Datei.
  3. Schließen Sie die Datei.

Die manuelle Verwaltung des Schließens einer Datei kann fehleranfällig sein. Wenn Ihr Programm einen Fehler meldet, während die Datei geöffnet ist, wird sie möglicherweise nicht ordnungsgemäß geschlossen. Um dies zu lösen, bietet Python die with-Anweisung. Sie kümmert sich automatisch um das Schließen der Datei für Sie, auch wenn Ausnahmen (Exceptions) auftreten, wodurch sichergestellt wird, dass Systemressourcen korrekt verwaltet werden.

Hinweis: Wenn Sie mit der Verwendung einer WebIDE (ähnlich VS Code) nicht vertraut sind, lernen Sie dies bitte zuerst in diesem Lab.

Die grundlegende Syntax lautet:

with open('filename.txt', 'mode') as file_variable:
    ## Perform operations on the file
  • open(): Die eingebaute Funktion zum Öffnen einer Datei.
  • 'filename.txt': Der Pfad zur Datei.
  • 'mode': Ein Zeichen, das angibt, wie die Datei verwendet wird (z. B. 'r' zum Lesen, 'w' zum Schreiben).
  • file_variable: Die Variable, die Sie zur Interaktion mit dem Datei-Objekt verwenden.

Dieser Schritt ist rein konzeptionell. In den nächsten Schritten werden Sie dieses Wissen anwenden, um tatsächliche Dateioperationen durchzuführen.

Dateien öffnen und lesen

In diesem Schritt lernen Sie, wie Sie Dateien mit der Funktion open() öffnen und lesen. Wir behandeln das Lesen der gesamten Datei, das zeilenweise Lesen in eine Liste und das Iterieren über die Zeilen, was bei großen Dateien sehr effizient ist.

Das Setup-Skript hat bereits zwei Dateien für Sie erstellt: hi.txt und sonnet29.txt.

Eine gesamte Datei mit read() lesen

Die Methode read() liest den gesamten Inhalt einer Datei in einen einzigen String ein.

  1. Öffnen Sie im Datei-Explorer auf der linken Seite die Datei read_file.py.
  2. Fügen Sie den folgenden Code hinzu. Dieses Skript öffnet hi.txt, liest dessen Inhalt und gibt ihn auf der Konsole aus.
## Datei mit der 'with'-Anweisung lesen: schließt die Datei automatisch, wenn fertig
with open('/home/labex/project/hi.txt') as hello_file:
    hello_content = hello_file.read()  ## Gesamten Dateiinhalt lesen

print(hello_content)
  1. Um das Skript auszuführen, öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:
python3 read_file.py

Sie sollten den Inhalt von hi.txt ausgegeben sehen.

Hello World!

Eine Datei als Liste von Zeilen mit readlines() lesen

Die Methode readlines() liest alle Zeilen aus einer Datei und gibt sie als Liste von Strings zurück. Jeder String in der Liste repräsentiert eine Zeile und enthält das Zeilenumbruchzeichen (\n) am Ende.

  1. Ändern Sie read_file.py mit dem folgenden Code, um sonnet29.txt zu lesen.
## readlines()-Methode: gibt eine Liste von Strings zurück, einen pro Zeile
with open('/home/labex/project/sonnet29.txt') as sonnet_file:
    lines = sonnet_file.readlines()  ## Gibt eine Liste zurück, wobei jede Zeile ein String ist

print(lines)
  1. Führen Sie das Skript erneut aus:
python3 read_file.py

Die Ausgabe ist eine Liste von Strings, wobei jeder String eine Zeile aus der Datei ist.

['When, in disgrace with fortune and men\'s eyes,\n', 'I all alone beweep my outcast state,\n', 'And trouble deaf heaven with my bootless cries,\n', 'And look upon myself and curse my fate,\n']

Zeilenweise durch eine Datei iterieren

Bei großen Dateien kann das Einlesen des gesamten Inhalts in den Speicher ineffizient sein. Ein besserer Ansatz ist die direkte Iteration über das Datei-Objekt. Dies liest die Datei Zeile für Zeile, ohne die gesamte Datei in den Speicher laden zu müssen.

  1. Ändern Sie read_file.py ein letztes Mal mit dem folgenden Code.
## Zeilenweise durch die Datei iterieren (speichereffizient für große Dateien)
with open('/home/labex/project/sonnet29.txt') as sonnet_file:
    for line in sonnet_file:  ## Datei-Objekt ist iterierbar
        print(line, end='')  ## Ohne zusätzlichen Zeilenumbruch ausgeben

Hinweis: Wir verwenden end='' in der print()-Funktion, um das Hinzufügen eines zusätzlichen Zeilenumbruchs zu verhindern, da jede line aus der Datei bereits mit einem solchen endet.

  1. Führen Sie das Skript aus:
python3 read_file.py

Dies gibt den Inhalt der Datei perfekt formatiert aus.

When, in disgrace with fortune and men's eyes,
I all alone beweep my outcast state,
And trouble deaf heaven with my bootless cries,
And look upon myself and curse my fate,

In Dateien schreiben

In diesem Schritt erfahren Sie, wie Sie Daten in Dateien schreiben. Wir behandeln zwei verschiedene Modi: den Schreibmodus ('w'), der vorhandene Inhalte überschreibt, und den Anhängemodus ('a'), der neue Daten an das Ende einer Datei hinzufügt.

Mit dem Modus 'w' in eine Datei schreiben

Wenn Sie eine Datei im Schreibmodus ('w') öffnen, wird eine neue Datei erstellt, falls sie nicht existiert. Wenn die Datei bereits existiert, wird ihr gesamter Inhalt gelöscht, bevor der neue Inhalt geschrieben wird.

  1. Öffnen Sie im Datei-Explorer die Datei write_file.py.
  2. Fügen Sie den folgenden Code hinzu. Dieses Skript erstellt eine Datei namens bacon.txt und schreibt eine einzelne Textzeile hinein. Die Methode write() gibt die Anzahl der geschriebenen Zeichen zurück.
## In Datei schreiben: 'w'-Modus überschreibt die vorhandene Datei
with open('/home/labex/project/bacon.txt', 'w') as bacon_file:  ## 'w' = Schreibmodus
    chars_written = bacon_file.write('Hello world!\n')  ## Gibt die Anzahl der geschriebenen Zeichen zurück

print(chars_written)
  1. Führen Sie das Skript im Terminal aus:
python3 write_file.py

Die Ausgabe zeigt die Anzahl der in die Datei geschriebenen Zeichen.

13

Sie können nun im Datei-Explorer eine neue Datei, bacon.txt, sehen.

Mit dem Modus 'a' an eine Datei anhängen

Der Anhängemodus ('a') wird verwendet, um Daten an das Ende einer vorhandenen Datei hinzuzufügen, ohne deren aktuellen Inhalt zu löschen. Falls die Datei nicht existiert, wird sie erstellt.

  1. Ändern Sie write_file.py, um eine weitere Zeile an bacon.txt anzuhängen.
## An Datei anhängen: 'a'-Modus hängt an die vorhandene Datei an
with open('/home/labex/project/bacon.txt', 'a') as bacon_file:  ## 'a' = Anhängemodus
    chars_written = bacon_file.write('Bacon is not a vegetable.')

print(chars_written)
  1. Führen Sie das Skript erneut aus:
python3 write_file.py

Die Ausgabe zeigt die Anzahl der Zeichen aus dem neuen String.

25

Den endgültigen Inhalt überprüfen

Um zu bestätigen, dass sowohl die Schreib- als auch die Anhängeoperation korrekt funktioniert haben, lesen wir nun den Inhalt von bacon.txt.

  1. Ändern Sie write_file.py ein letztes Mal, um den Inhalt von bacon.txt zu lesen und auszugeben.
with open('/home/labex/project/bacon.txt') as bacon_file:
    content = bacon_file.read()

print(content)
  1. Führen Sie das Skript aus:
python3 write_file.py

Die Ausgabe sollte den kombinierten Inhalt aus den Schreib- und Anhängeoperationen anzeigen.

Hello world!
Bacon is not a vegetable.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss dieses Labs über das Lesen und Schreiben von Dateien in Python!

In diesem Lab haben Sie die wesentlichen Fähigkeiten für die Datei-E/A (Input/Output) erlernt. Sie begannen damit, die Bedeutung der with-Anweisung für eine sichere und automatische Dateiverwaltung zu verstehen.

Anschließend haben Sie verschiedene Methoden zum Lesen von Dateien geübt:

  • read() um den gesamten Inhalt als einen einzigen String zu erhalten.
  • readlines() um eine Liste aller Zeilen zu erhalten.
  • Direkte Iteration über das Datei-Objekt für eine speichereffiziente Methode zur zeilenweisen Verarbeitung großer Dateien.

Zuletzt haben Sie erkundet, wie man in Dateien schreibt:

  • Verwendung des Schreibmodus ('w'), um eine neue Datei zu erstellen oder eine bestehende zu überschreiben.
  • Verwendung des Anhängemodus ('a'), um Inhalte an das Ende einer Datei anzufügen, ohne deren vorherige Daten zu löschen.

Diese grundlegenden Operationen sind Bausteine für komplexere Anwendungen, die Daten speichern, Konfigurationen lesen oder Textdateien verarbeiten müssen.