Seite 1 von 1

Tupel in .txt speichern und laden

Verfasst: Sonntag 11. Juli 2021, 19:42
von dausd
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?

Re: Tupel in .txt speichern und laden

Verfasst: Sonntag 11. Juli 2021, 19:48
von Sirius3
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.

Re: Tupel in .txt speichern und laden

Verfasst: Sonntag 11. Juli 2021, 19:56
von dausd
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?

Re: Tupel in .txt speichern und laden

Verfasst: Sonntag 11. Juli 2021, 20:21
von Sirius3
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)

Re: Tupel in .txt speichern und laden

Verfasst: Sonntag 11. Juli 2021, 20:57
von dausd
Super, genau das sollte passieren!
Ich danke dir vielmals!