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")