Listen auf Datei schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LeonTUK
User
Beiträge: 1
Registriert: Mittwoch 8. Mai 2019, 19:35

Hallo,
Ich habe ein kleines Problem und zwar : ich soll einen Lagesensor programmieren und die Messdaten auf eine Datei schreiben. Soweit so gut ich habe den Sensor in Betrieb genommen und auch meinen Code soweit, dass er eine Datei erstellt etc.
Nun meine Frage : mit file.write() schreib ich normal meine Sachen in die Datei. Allerdings muss ich sie davor zu einem String formatieren. Ist es Laufzeit technisch egal ob ich das mache? Und wenn ich die Datei weiter verarbeiten will muss ich jedes Element aus den Listen wieder zurück konvertieren oder? Gibt es zum Schreiben von Listen in eine Datei eine Möglichkeit, die Floats die darin stehen in ihrem Typ zu lassen?
Danke schonmal im Voraus für die Hilfe
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

In Textdateien kannst Du nur Text schreiben. Und den mußt Du natürlich auch wieder zurückkonvertieren. Das ist der normale Weg.
Um Daten mit Typ in Dateien zu schreiben, gibt es Protokolle, z.B. JSON.
heiner88
User
Beiträge: 65
Registriert: Donnerstag 20. Oktober 2016, 07:29

Ohne JSON ist es ein bisschen umständlicher:

Code: Alles auswählen

#!/usr/bin/python3

# write data
with open("daten.txt", "w") as f:
    f.write("%f %f %f" % (1.00, 2.00, 3.00))

# read data
with open("daten.txt", "r") as f:
    data = f.read()

x, y, z = data.split(" ")
x = float(x)
y = float(y)
z = float(z)
print(x, y, z)
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@heiner88: wobei Du damit nicht den Typ mit in der Datei speicherst, sondern wissen muß, dass es sich um Zahlen handel.
Beim Schreiben und Lesen von Text-Dateien immer ein encoding angeben, die default-Werte sind in Python3 leider systemabhängig.
Mit `map` vereinfacht sich das noch:

Code: Alles auswählen

with open("daten.txt", encoding="ASCII") as f:
    x, y, z = map(float, f.read().split())
Antworten