Was sind die Unterschiede zwischen den Dateizugriffsmodi in Python?

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Die Dateiverarbeitungsfähigkeiten von Python sind für eine Vielzahl von Anwendungen unerlässlich. Das Verständnis der verschiedenen Dateizugriffsmodi ist entscheidend für die effektive Verwaltung und Bearbeitung von Dateien. Dieses Lab (Labor) befasst sich mit den gängigen Dateizugriffsmodi in Python, ihren Unterschieden und der Auswahl des geeigneten Modus für Ihren spezifischen Anwendungsfall.

In diesem Lab (Labor) lernen Sie die grundlegenden Dateizugriffsmodi in Python kennen, erkunden ihre gängigen Anwendungsfälle und verstehen, wie Sie den geeigneten Modus für Ihre Dateibearbeitungen auswählen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/FileHandlingGroup -.-> python/file_opening_closing("Opening and Closing Files") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/catching_exceptions -.-> lab-397713{{"Was sind die Unterschiede zwischen den Dateizugriffsmodi in Python?"}} python/file_opening_closing -.-> lab-397713{{"Was sind die Unterschiede zwischen den Dateizugriffsmodi in Python?"}} python/file_reading_writing -.-> lab-397713{{"Was sind die Unterschiede zwischen den Dateizugriffsmodi in Python?"}} python/file_operations -.-> lab-397713{{"Was sind die Unterschiede zwischen den Dateizugriffsmodi in Python?"}} end

Verstehen und Üben des Lesemodus ('r')

In Python geben Dateizugriffsmodi an, wie eine Datei geöffnet werden soll und welche Operationen (wie Lesen oder Schreiben) zulässig sind. Das Verständnis dieser Modi ist entscheidend für eine effektive Dateiverarbeitung. Wenn Sie die integrierte Funktion open() verwenden, geben Sie den Dateipfad und optional eine Moduszeichenkette an. Beispielsweise öffnet open('my_file.txt', 'r') die Datei zum Lesen.

Hier ist ein kurzer Überblick über die gängigen Modi:

  • Lesemodus ('r'): Öffnet die Datei zum Lesen (Standard). Der Dateizeiger befindet sich am Anfang der Datei. Löst FileNotFoundError aus, wenn die Datei nicht existiert.
  • Schreibmodus ('w'): Öffnet die Datei zum Schreiben. Kürzt (leert) die Datei, falls sie existiert, und erstellt sie, falls nicht. Der Dateizeiger befindet sich am Anfang der Datei.
  • Anhängemodus ('a'): Öffnet die Datei zum Schreiben. Der Dateizeiger befindet sich am Ende der Datei, falls sie existiert, und erstellt sie, falls nicht. Neue Daten werden am Ende hinzugefügt.
  • Lesen und Schreiben ('r+'): Öffnet eine existierende Datei zum Lesen und Schreiben. Der Dateizeiger befindet sich am Anfang der Datei.
  • Schreiben und Lesen ('w+'): Öffnet die Datei zum Schreiben und Lesen. Kürzt oder erstellt die Datei. Der Dateizeiger befindet sich am Anfang der Datei.
  • Anhängen und Lesen ('a+'): Öffnet die Datei zum Anhängen und Lesen. Der Dateizeiger befindet sich zum Schreiben am Ende der Datei. Erstellt die Datei, falls sie nicht existiert.

Üben wir mit dem einfachsten Modus: Lesen ('r'). Dieser Modus wird ausschließlich zum Lesen des Inhalts einer vorhandenen Datei verwendet. Der Dateizeiger beginnt am Anfang. Denken Sie daran, dass der Versuch, eine nicht vorhandene Datei im Modus 'r' zu öffnen, einen Fehler verursacht.

Zuerst benötigen wir eine Datei zum Lesen. Navigieren Sie im VS Code Editor innerhalb von LabEx zum Verzeichnis /home/labex/project im Datei-Explorer. Erstellen Sie eine neue Datei namens my_reading_file.txt. Fügen Sie die folgenden Zeilen hinzu und speichern Sie die Datei:

This is the first line.
This is the second line.

Erstellen Sie nun ein Python-Skript im selben Verzeichnis namens read_example.py. Fügen Sie den folgenden Code hinzu, der die Textdatei im Lesemodus öffnet, ihren Inhalt liest und ausgibt. Wir fügen einen try...except-Block hinzu, um den Fall, dass die Datei nicht gefunden wird, ordnungsgemäß zu behandeln.

try:
    ## Open the file in read mode ('r')
    with open('/home/labex/project/my_reading_file.txt', 'r') as file:
        ## Read the entire content of the file
        content = file.read()
        print("File content:")
        print(content)
except FileNotFoundError:
    print("Error: The file my_reading_file.txt was not found.")
except Exception as e:
    print(f"An error occurred: {e}")

print("\\nFinished reading the file.")

Speichern Sie dieses Python-Skript. Öffnen Sie als Nächstes das Terminal in VS Code (Terminal > Neues Terminal). Stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden, indem Sie pwd ausführen. Es sollte /home/labex/project angezeigt werden.

Führen Sie das Skript mit dem Python-Interpreter aus:

python read_example.py

Sie sollten den Inhalt von my_reading_file.txt im Terminal sehen, gefolgt von der Abschlussmeldung:

File content:
This is the first line.
This is the second line.

Finished reading the file.

Dies demonstriert das erfolgreiche Öffnen und Lesen einer Datei im Modus 'r'.

Illustration of reading a file

Üben mit dem Schreibmodus ('w')

Der Schreibmodus ('w') wird verwendet, wenn Sie in eine Datei schreiben möchten. Seien Sie vorsichtig: Wenn die Datei bereits existiert, wird sie durch das Öffnen im Modus 'w' gekürzt (truncate), d. h. der gesamte vorherige Inhalt wird gelöscht. Wenn die Datei nicht existiert, wird sie im Modus 'w' für Sie erstellt. Dieser Modus ist ideal, um neue Dateien zu erstellen oder mit einer vorhandenen Datei neu zu beginnen.

Versuchen wir, in eine Datei zu schreiben. Erstellen Sie in Ihrem Verzeichnis /home/labex/project eine neue Python-Datei namens write_example.py. Fügen Sie den folgenden Code hinzu. Dieses Skript öffnet (oder erstellt) my_writing_file.txt im Schreibmodus und schreibt zwei Zeilen hinein.

try:
    ## Open the file in write mode ('w')
    ## If the file exists, its content will be overwritten.
    ## If the file does not exist, it will be created.
    with open('/home/labex/project/my_writing_file.txt', 'w') as file:
        ## Write some content to the file
        file.write("This is the first line written in write mode.\n")
        file.write("This is the second line.\n")
    print("Content successfully written to my_writing_file.txt")

except Exception as e:
    print(f"An error occurred: {e}")

print("\nFinished writing to the file.")

Speichern Sie das Skript write_example.py. Führen Sie das Skript im Terminal (immer noch in /home/labex/project) aus:

python write_example.py

Sie sollten eine Bestätigungsmeldung sehen:

Content successfully written to my_writing_file.txt

Finished writing to the file.

Um zu bestätigen, dass die Datei erstellt wurde und den korrekten Text enthält, verwenden Sie den Befehl cat im Terminal:

cat /home/labex/project/my_writing_file.txt

Die Ausgabe sollte genau das sein, was das Skript geschrieben hat:

This is the first line written in write mode.
This is the second line.

Dies demonstriert, wie Sie eine Datei erstellen oder überschreiben und mit dem Modus 'w' Inhalte hineinschreiben können.

Üben mit dem Anhängemodus ('a')

Im Gegensatz zum Schreibmodus ('w') wird der Anhängemodus ('a') verwendet, um Inhalte an das Ende einer bestehenden Datei anzufügen, ohne deren aktuellen Inhalt zu löschen. Wenn die Datei nicht existiert, wird sie im Modus 'a' erstellt. Der Dateizeiger wird beim Öffnen automatisch an das Ende der Datei positioniert, sodass alle write()-Operationen Daten anhängen.

Hängen wir einige Zeilen an die Datei my_writing_file.txt an, die wir im vorherigen Schritt erstellt haben. Erstellen Sie ein neues Python-Skript namens append_example.py in /home/labex/project mit dem folgenden Code:

try:
    ## Open the file in append mode ('a')
    ## If the file exists, new content will be added to the end.
    ## If the file does not exist, it will be created.
    with open('/home/labex/project/my_writing_file.txt', 'a') as file:
        ## Append some content to the file
        file.write("This line is appended.\n")
        file.write("Another line is appended.\n")
    print("Content successfully appended to my_writing_file.txt")

except Exception as e:
    print(f"An error occurred: {e}")

print("\nFinished appending to the file.")

Speichern Sie dieses Skript. Führen Sie es nun über das Terminal aus:

python append_example.py

Das Skript bestätigt die Anhängeoperation:

Content successfully appended to my_writing_file.txt

Finished appending to the file.

Um das Ergebnis zu sehen, verwenden Sie erneut cat, um die gesamte Datei anzuzeigen:

cat /home/labex/project/my_writing_file.txt

Sie sollten die ursprünglichen zwei Zeilen gefolgt von den beiden neu angehängten Zeilen sehen:

This is the first line written in write mode.
This is the second line.
This line is appended.
Another line is appended.

Der Anhängemodus ist sehr nützlich für Aufgaben wie das Hinzufügen von Protokolleinträgen (log entries) oder das Hinzufügen neuer Datensätze (records) zu einer Datendatei, ohne vorherige Daten zu verlieren.

Üben mit Lese-/Schreibmodi und Auswahl des richtigen Modus

Python bietet auch Modi, die sowohl das Lesen als auch das Schreiben innerhalb desselben open()-Kontexts ermöglichen. Diese bieten mehr Flexibilität, erfordern aber eine sorgfältige Handhabung des Dateizeigers (file pointer).

  • Lesen und Schreiben ('r+'): Öffnet eine bestehende Datei zum Lesen und Schreiben. Der Zeiger beginnt am Anfang. Das Schreiben überschreibt vorhandene Inhalte ab der Position des Zeigers.
  • Schreiben und Lesen ('w+'): Öffnet eine Datei zum Schreiben und Lesen. Sie kürzt (truncate) die Datei, falls sie existiert, oder erstellt sie, falls nicht. Der Zeiger beginnt am Anfang.
  • Anhängen und Lesen ('a+'): Öffnet eine Datei zum Anhängen (Schreiben am Ende) und Lesen. Sie erstellt die Datei, falls sie nicht existiert. Der Zeiger beginnt zum Schreiben am Ende, aber Sie können ihn verschieben (z. B. mit file.seek(0)), um vom Anfang zu lesen.

Demonstrieren wir 'r+'. Wir verwenden die Datei my_reading_file.txt, die in Schritt 1 erstellt wurde. Wir öffnen sie, lesen den Inhalt, verschieben dann den Zeiger zurück zum Anfang und überschreiben den Anfang der Datei.

Erstellen Sie eine Python-Datei namens rplus_example.py in /home/labex/project. Fügen Sie diesen Code hinzu:

try:
    ## Open the file in read and write mode ('r+')
    ## The file must exist for this mode.
    with open('/home/labex/project/my_reading_file.txt', 'r+') as file:
        ## Read the initial content
        initial_content = file.read()
        print("Initial file content:")
        print(initial_content)

        ## Move the file pointer back to the beginning
        print("\nMoving pointer to the beginning using file.seek(0).")
        file.seek(0)

        ## Write new content at the beginning (overwriting existing content)
        print("Writing new content...")
        file.write("Prepended line 1.\n")
        file.write("Prepended line 2.\n")

        ## If the new content is shorter than what was overwritten,
        ## the rest of the original content might remain unless truncated.
        ## We can use file.truncate() after writing to remove any trailing old data.
        print("Truncating file to the current position to remove old trailing data.")
        file.truncate()

        print("\nContent written and file truncated.")

except FileNotFoundError:
    print("Error: The file was not found. 'r+' requires the file to exist.")
except Exception as e:
    print(f"An error occurred: {e}")

print("\nFinished with r+ mode example.")

Dieses Skript öffnet die Datei im Modus 'r+', liest, springt zurück zum Anfang (file.seek(0)), schreibt neue Zeilen (überschreibt) und verwendet dann file.truncate(), um alle verbleibenden Originalinhalte zu entfernen, die möglicherweise über den neu geschriebenen Text hinaus vorhanden sind.

Speichern Sie rplus_example.py. Bevor Sie es ausführen, stellen wir sicher, dass my_reading_file.txt ihren ursprünglichen Inhalt hat:

echo "This is the first line." > /home/labex/project/my_reading_file.txt
echo "This is the second line." >> /home/labex/project/my_reading_file.txt

Führen Sie nun das Python-Skript über das Terminal aus:

python rplus_example.py

Sie sehen den ursprünglichen Inhalt gedruckt, gefolgt von Meldungen über den Prozess:

Initial file content:
This is the first line.
This is the second line.


Moving pointer to the beginning using file.seek(0).
Writing new content...
Truncating file to the current position to remove old trailing data.

Content written and file truncated.

Finished with r+ mode example.

Überprüfen Sie den endgültigen Dateiinhalt mit cat:

cat /home/labex/project/my_reading_file.txt

Die Ausgabe sollte dank des Überschreibens und Kürzens nur den neu geschriebenen Inhalt anzeigen:

Prepended line 1.
Prepended line 2.

Auswahl des geeigneten Dateizugriffsmodus (File Access Mode)

Die Auswahl des richtigen Modus ist entscheidend. Hier ist eine kurze Anleitung:

  • Verwenden Sie 'r' für schreibgeschützten (read-only) Zugriff auf bestehende Dateien.
  • Verwenden Sie 'w', um eine neue Datei zu erstellen oder den Inhalt einer bestehenden Datei vollständig zu ersetzen.
  • Verwenden Sie 'a', um am Ende einer Datei hinzuzufügen, ohne vorhandene Daten zu verlieren (gut für Protokolle/Logs).
  • Verwenden Sie 'r+', um eine bestehende Datei zu lesen und zu ändern, und zwar vom Anfang an.
  • Verwenden Sie 'w+', um eine Datei zu erstellen oder zu überschreiben und sie dann zu lesen/schreiben.
  • Verwenden Sie 'a+', um an eine Datei anzuhängen und sie auch lesen zu können (erfordert seek()).

Diese Tabelle fasst die wichtigsten Verhaltensweisen zusammen:

Modus Lesen (Read) Schreiben (Write) Erstellen, falls nicht vorhanden (Create if not exists) Kürzen, falls vorhanden (Truncate if exists) Zeigerposition (Initial) (Pointer Position)
'r' Ja Nein Nein Nein Anfang (Beginning)
'w' Nein Ja Ja Ja Anfang (Beginning)
'a' Nein Ja Ja Nein Ende (End)
'r+' Ja Ja Nein Nein Anfang (Beginning)
'w+' Ja Ja Ja Ja Anfang (Beginning)
'a+' Ja Ja Ja Nein Ende (End)

Indem Sie berücksichtigen, ob Sie lesen, schreiben, anhängen, bestehende Dateien verarbeiten oder neue erstellen müssen, können Sie selbstbewusst den am besten geeigneten Modus für Ihre Aufgabe auswählen.

Zusammenfassung

In diesem Lab haben Sie die verschiedenen Dateizugriffsmodi (file access modes) in Python und ihre wichtigsten Unterschiede kennengelernt. Sie haben die Modi 'r', 'w' und 'a' für grundlegende Lese-, Schreib- bzw. Anhängeoperationen (reading, writing, and appending operations) untersucht. Sie haben auch kurz die Lese- und Schreibmodi ('r+', 'w+', 'a+') angesprochen, die mehr Flexibilität bieten.

Durch das Üben mit diesen Modi und das Verständnis ihres Verhaltens in Bezug auf Dateierstellung (file creation), Kürzung (truncation) und Zeigerposition (pointer position) sind Sie nun in der Lage, den geeigneten Modus für Ihre Dateiverarbeitungsaufgaben (file handling tasks) in Python auszuwählen. Dieses Wissen ist grundlegend für die effektive Verwaltung und Bearbeitung von Dateien in Ihren Anwendungen.