4.7 Daten speichern

In diesem Kapitel lernen Sie, wie Sie Daten in Python dauerhaft speichern und verwalten können. Das Speichern von Daten ist ein grundlegender Bestandteil vieler Anwendungen, insbesondere wenn Informationen über längere Zeiträume hinweg verfügbar sein müssen. Wir werden uns mit verschiedenen Methoden des Speicherns von Daten befassen, angefangen von einfachen Textdateien bis hin zu komplexeren Datenformaten wie JSON.

Übersicht Daten speichern

Daten können in verschiedenen Formaten und auf unterschiedliche Arten gespeichert werden. Je nach Anwendungsfall können Sie einfache Textdateien verwenden, um Daten im Klartext zu speichern, oder komplexere Strukturen wie JSON, die sich gut für das Speichern von strukturierten Daten eignen.

Methode Beschreibung
Textdateien Speichert Daten im Klartext. Geeignet für einfache, unstrukturierte Daten.
CSV-Dateien Speichert tabellarische Daten im CSV-Format (Comma-Separated Values).
JSON-Dateien Speichert strukturierte Daten im JSON-Format (JavaScript Object Notation).
Binäre Dateien Speichert Daten in einem binären Format, das nicht direkt lesbar ist.
Datenbanken (SQLite) Verwaltet große Datenmengen strukturiert und bietet erweiterte Abfragemöglichkeiten.

Spezifischere Anweisungen und Methoden

Diese Tabelle beschreibt spezifischere Anweisungen und Methoden, die im Zusammenhang mit dem Speichern von Daten in Python verwendet werden.

Anweisung/Methode Beschreibung
open() Öffnet eine Datei zum Lesen ("r"), Schreiben ("w"), Anhängen ("a") oder als Binärdatei ("b").
write() Schreibt Daten in eine geöffnete Datei.
read() Liest Daten aus einer geöffneten Datei.
json.dump() Schreibt ein Python-Objekt (z.B. Dictionary) in eine JSON-Datei.
json.load() Liest Daten aus einer JSON-Datei und wandelt sie in ein Python-Objekt um.
csv.writer() Schreibt Daten in eine CSV-Datei.
csv.reader() Liest Daten aus einer CSV-Datei.
wb Modus zum Öffnen einer Datei zum Schreiben im Binärformat.
rb Modus zum Öffnen einer Datei zum Lesen im Binärformat.
with Sorgt dafür, dass Dateien ordnungsgemäß geöffnet und geschlossen werden, auch wenn ein Fehler auftritt.

Speichern in Textdateien

Eine der einfachsten Methoden, Daten zu speichern, ist die Verwendung von Textdateien. Textdateien sind besonders nützlich, wenn Sie einfache Daten speichern möchten, die keinen speziellen Formatierungsbedarf haben.

Beispiel: Schreiben und Lesen einer Textdatei

# Schreiben und lesen aus einer Textdatei
# J. Thomaschewski, 04.09.2024

# Schreiben in eine Textdatei
with open("daten.txt", "w") as datei:
    datei.write("Dies ist eine gespeicherte Nachricht.\n")

# Lesen aus einer Textdatei
with open("daten.txt", "r") as datei:
    inhalt = datei.read()
    print(inhalt)

In diesem Beispiel wird eine Textdatei erstellt und eine einfache Nachricht darin gespeichert. Anschließend wird der Inhalt der Datei gelesen und auf der Konsole ausgegeben.

Schauen Sie nach: auf dem Pi Pico liegt nun eine Datei daten.txt.

Speichern in JSON-Dateien

JSON (JavaScript Object Notation) ist ein weit verbreitetes Format zum Speichern und Übertragen von strukturierten Daten. Es ist ideal für das Speichern von Daten, die in einem hierarchischen Format vorliegen, wie z.B. Dictionaries oder Listen.

Beispiel: Speichern und Laden von Daten im JSON-Format

# Schreiben und lesen im JSON-Format
# J. Thomaschewski, 04.09.2024
import json

# Daten als Dictionary
daten = {
    "name": "Ute",
    "alter": 22,
    "stadt": "Emden"
}

# Schreiben der Daten in eine JSON-Datei
with open("daten.json", "w") as json_datei:
    json.dump(daten, json_datei)

# Lesen der Daten aus einer JSON-Datei
with open("daten.json", "r") as json_datei:
    geladene_daten = json.load(json_datei)
    print(geladene_daten)

In diesem Beispiel werden Daten in einer JSON-Datei gespeichert und anschließend wieder aus der Datei gelesen. JSON ist besonders nützlich, wenn Sie komplexere Datenstrukturen wie Dictionaries speichern möchten.

Speichern in CSV-Dateien (nicht in Micro-Python!)

CSV-Dateien (Comma-Separated Values) sind nützlich, um tabellarische Daten zu speichern. Jede Zeile einer CSV-Datei stellt eine Datenzeile dar, und die einzelnen Werte sind durch Kommas getrennt.

Folgendes Beispiel können wir in MicroPython nicht probieren, da es keine Bibliothek csv gibt. Hier könnten wir eine "richtige" Python-Umgebung mit dem Editor "Visual Studio Code" verwenden.

Beispiel: Speichern und Lesen von Daten im CSV-Format

# Schreiben und lesen - csv
# J. Thomaschewski, 04.09.2024
import csv

# Daten als Liste von Listen
daten = [
    ["Name", "Alter", "Stadt"],
    ["Micha", 25, "Emden"],
    ["Anna", 23, "Berlin"]
]

# Schreiben der Daten in eine CSV-Datei
with open("daten.csv", "w", newline="") as csvDatei:
    writer = csv.writer(csvDatei)
    writer.writerows(daten)

# Lesen der Daten aus einer CSV-Datei
with open("daten.csv", "r") as csvDatei:
    reader = csv.reader(csvDatei)
    for zeile in reader:
        print(zeile)

In diesem Beispiel werden tabellarische Daten in einer CSV-Datei gespeichert und anschließend wieder aus der Datei gelesen.

Pi Pico Script: Speichern von Sensordaten

In diesem Beispiel speichern wir Sensordaten, die vom BMP280-Sensor auf dem Pi Pico erfasst werden, in einer Textdatei.

# Sensordaten speichern (BMP280)
# J. Thomaschewski, 04.09.2024
from machine import Pin, SoftI2C
from bmp280 import BMP280
from time import sleep

# Initialize I2C communication (GPIO angepasst)
i2c = SoftI2C(scl=Pin(17), sda=Pin(16), freq=400000)
bmp = BMP280(i2c)

with open("bmp280_sensordaten.txt", "w") as datei:
    for _ in range(10):
        # Messwerte erfassen
        temperature = bmp.temperature
        pressure = bmp.pressure / 100  # hPa

        # Speichern der Sensordaten in der Textdatei
        datei.write(f"Temperatur: {temperature:.2f}°C, Luftdruck: {pressure:.2f} hPa\n")
        sleep(2)

print("Sensordaten wurden gespeichert.")

In diesem Beispiel werden die Temperatur- und Luftdruckwerte zehnmal erfasst und in einer Textdatei gespeichert. Jede Zeile der Datei enthält die Messwerte für Temperatur und Luftdruck.

Aufgabe

Schreiben Sie ein Script, das die Sensordaten des BMP280-Sensors in einer JSON-Datei speichert und anschließend wieder ausliest. Speichern Sie mindestens drei verschiedene Messungen in der Datei.

Lösung
# Loesung der Aufgabe BMP280-Sensors - JSON
# J. Thomaschewski, 04.09.2024
import json
from machine import Pin, SoftI2C
from bmp280 import BMP280
from time import sleep

# Initialize I2C communication
i2c = SoftI2C(scl=Pin(17), sda=Pin(16), freq=400000)
bmp = BMP280(i2c)
daten = []

# Erfassen von Sensordaten
for _ in range(3):
    temperature = bmp.temperature
    pressure = bmp.pressure / 100  # hPa
    daten.append({"Temperatur": temperature, "Luftdruck": pressure})
    sleep(2)

# Speichern der Daten in einer JSON-Datei
with open("bmp280_sensordaten.json", "w") as json_datei:
    json.dump(daten, json_datei)

# Lesen der Daten aus der JSON-Datei
with open("bmp280_sensordaten.json", "r") as json_datei:
    geladene_daten = json.load(json_datei)
    print("Geladene Sensordaten:", geladene_daten)