Zum Inhalt

Datei-Ein-/Ausgabe (I/O)

Datei-E/A

  • Python verfügt über eine integrierte Funktion, die es uns ermöglicht, zwei Dateien zu öffnen und zu schreiben.

Datei-E/A (Eingabe/Ausgabe) ermöglicht es uns, Daten aus externen Dateien zu lesen und Daten in sie zurückzuschreiben.


Dateien öffnen und lesen

my_file = open('test.txt', 'r')

print(my_file.read())       # reads the whole file

my_file.seek(0)             # move cursor back to start
print(my_file.read())       # reads nothing because the cursor is at the end of the file

print(my_file.readline())   # reads the first line of the file
print(my_file.readlines())  # reads the whole file and returns a list of lines

my_file.close()             # always close files after use

Verwendung mit (Kontextmanager)

Immer mit open(...) verwenden, um sicherzustellen, dass Dateien ordnungsgemäß geschlossen werden.

with open("file.txt", mode='r') as my_file:
    print(my_file.readlines())  

Schließt die Datei automatisch, nachdem der Codeblock ausgeführt wurde.

In Dateien schreiben

r+ → lesen und schreiben (überschreibt Inhalt).

with open("test.txt", mode='r+') as my_file: 
    text = my_file.write(':)')                 
    print(text)

Mit r+ können wir die Datei lesen und schreiben. Schreibt in die Datei und überschreibt den vorhandenen Inhalt.

w → schreiben (erstellt eine neue Datei oder überschreibt eine vorhandene).

with open("test.txt", mode='w') as my_file:  
    my_file.write('I am writing to the file\n')  

w erlaubt uns, in die Datei zu schreiben. Überschreibt den vorhandenen Inhalt, \n fügt eine neue Zeile hinzu.

a → append (fügt zum Ende hinzu, ohne es zu überschreiben).

with open("test.txt", mode='a') as my_file:  
    my_file.write('I am appending to the file\n')  

Verwenden Sie „a“ zum Anhängen an die Datei. Es wird am Ende der Datei hinzugefügt, ohne den vorhandenen Inhalt zu überschreiben.

Neue Dateien erstellen

with open("new_file.txt", mode='w') as my_file: 
    my_file.write('I am sad\n')

Erstellt eine neue Datei, wenn diese nicht vorhanden ist, und schreibt in diese.

Relative Pfade

with open("./app/file.txt", mode='r+') as my_file:  # (relative path)to specify the path of the file
    print(my_file.write('I am sad again\n'))
  • ./ → aktuelles Verzeichnis
  • ../ → übergeordnetes Verzeichnis/ein Verzeichnis zurückgehen
  • / → Stammverzeichnis

Fehlerbehandlung bei Datei-E/A

Verwenden Sie try/except-Blöcke, um Fehler wie FileNotFoundError oder IOError zu behandeln.

try:
    with open("file.txt", mode='r+') as my_file:
        print(my_file.write('something'))
except FileNotFoundError as err:
    print("File not found")
    raise err
except IOError as err: 
    print("IO error")
    raise err

Ein E/A-Fehler ist ein allgemeinerer Fehler, der beim Arbeiten mit Dateien auftreten kann.

Pathlib-Modul pathlib bietet eine moderne Möglichkeit, mit Dateipfaden über verschiedene Betriebssysteme (Windows, Mac, Linux) hinweg zu arbeiten und Dateipfade zu manipulieren.

Umgang mit Binärdateien

Binärdateien speichern Daten im Rohbyte-Format (z. B. Bilder, Audio, ausführbare Dateien). - Im Gegensatz zu Textdateien sind sie nicht für Menschen lesbar, können aber effizient verarbeitet werden. – Nützlich für den Umgang mit Bildern, Audio, ausführbaren Dateien oder anderen Nicht-Text-Daten.

Öffnen von Binärdateien

Verwenden Sie die Modi rb, wb und ab, wenn Sie mit Binärdateien arbeiten:

rb → Binär lesen wb → binär schreiben (überschreibt vorhandene Datei oder erstellt neue) ab → Binärdatei anhängen

  • Lesen einer Binärdatei
with open("image.png", "rb") as file:
    data = file.read()
    print(type(data))   # <class 'bytes'>
  • Binärdateien schreiben
with open("output.bin", "wb") as file:
    file.write(b"Hello Binary World")
  • Kopieren von Binärdateien
with open("image.png", "rb") as src:
    with open("copy.png", "wb") as dest:
        dest.write(src.read())
  • Anhängen an Binärdateien
with open("data.bin", "ab") as file:
    file.write(b"\x00\xFF")   # append raw bytes

Fehlerbehandlung im Binärformat

Behandeln Sie beim Arbeiten mit Binärdateien immer Ausnahmen:

try:
    with open("missing.bin", "rb") as file:
        data = file.read()
except FileNotFoundError:
    print("File not found")
except IOError:
    print("I/O error occurred")

Handhabung von JSON-Dateien

JSON (JavaScript Object Notation) ist ein leichtes Format zum Speichern und Austauschen strukturierter Daten.
Python bietet das integrierte „json“-Modul für die Arbeit mit JSON-Dateien.


JSON-Dateien lesen

Verwenden Sie „json.load()“, um JSON-Daten aus einer Datei zu lesen.

import json

with open("data.json", "r") as file:
    data = json.load(file)

print(data)          # Output: Python dictionary
print(data["name"])  # Access values by key

JSON-Dateien schreiben

Verwenden Sie „json.dump()“, um Python-Objekte in eine JSON-Datei zu schreiben.

import json

person = {
    "name": "Marwa",
    "skills": ["Python", "Data Analysis"]
}

# Writing JSON to a file
with open("data.json", "w") as file:
    json.dump(person, file, indent=4)  # indent=4 makes it readable

Konvertieren zwischen JSON-Strings und Python-Objekten

  • json.loads() → JSON-String in Python-Objekt analysieren.
  • json.dumps() → Python-Objekt in JSON-String konvertieren.
json_string = '{"name": "Marwa"}'
data = json.loads(json_string)
print(data["name"])   # Output: Marwa

python_obj = {"city": "Berlin", "country": "Germany"}
json_str = json.dumps(python_obj)
print(json_str)       # Output: {"city": "Berlin", "country": "Germany"}

Fehlerbehandlung

Behandeln Sie beim Arbeiten mit JSON immer Ausnahmen:

import json

try:
    with open("data.json", "r") as file:
        data = json.load(file)
except FileNotFoundError:
    print("File not found")
except json.JSONDecodeError:
    print("Invalid JSON format")