Tupel in .txt speichern und laden

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
dausd
User
Beiträge: 7
Registriert: Dienstag 25. Mai 2021, 11:02

Hallo,

ich möchte jede Menge Tupel in einen Array packen und in einer .txt-Datei speichern. Das klappt mit diesem Code:

Code: Alles auswählen

liste = []
for i in range(1,10**6 + 1):
	liste.append( (i, i**2) )

textfile = open("textdatei.txt", "w")
for element in liste:
   textfile.write(str(element) + " ; ")
textfile.close()
Nun habe ich Tupel in der textdatei.txt
Diese lade ich nun mittels

Code: Alles auswählen

    with open("textdatei.txt") as f:
        liste = [int(x) for x in f.read().split(" ; ") if x.strip()]
    return liste
und erhalte den Fehler
ValueError: invalid literal for int() with base 10: '(0, [0, 0, 0])'
Wie kann ich das beheben?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast die Daten nicht so erzeugt, wie Du behauptest.
Warum öffnest Du die Datei beim Schreiben nicht mit with? Die Stringrepräsentation eines Tuples ist nicht zum dauerhaften Speichern gedacht. Benutze eine passendes Datenformat, wie z.B. JSON.
dausd
User
Beiträge: 7
Registriert: Dienstag 25. Mai 2021, 11:02

Uff... das geht weit über mein Verständnis hinaus.
Frage ich anders:
Wie speichere ich Tupel so ab, dass ich sie als Liste laden kann?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Schreiben:

Code: Alles auswählen

import json
liste = []
for i in range(1,10**6 + 1):
	liste.append( (i, i**2) )

with open("textdatei.txt", "w", encoding="utf8") as file:
    json.dump(liste, file)
Lesen:

Code: Alles auswählen

with open("textdatei.txt", "r", encoding="utf8") as file:
    liste = json.load(file)
dausd
User
Beiträge: 7
Registriert: Dienstag 25. Mai 2021, 11:02

Super, genau das sollte passieren!
Ich danke dir vielmals!
Antworten