Seite 1 von 1

Listen speichern und laden

Verfasst: Samstag 29. Januar 2022, 18:59
von KlausP
Also einfache Textlisten machten bislang kein Problem.
Nun habe ich aber Listen gespeichert und nach dem Einlesen haben sie störende Quotes.
Ich habe ne Weile gegoogelt nach Listen und Quotes, aber leider keinen Hinweis gefunden der funktionierte.

Code: Alles auswählen

# Matrix_nest Version 1q  - 2022-0129


matrix_org = [['c11', 'c12', '3', 'c13', 'r14', '5', '6a'],
              ['c11', '2', 'c13', 'r14', 7],
              ['c11', '2', 'r15', '5']]

print("die originale Matrix \n\n", matrix_org)

# Matrix speichern
with open("E://Matrix_org", 'w', encoding = "utf-8") as fobj_out:
    for j in range(0, 3):
        fobj_out.write(str(matrix_org[j]) + '\n')        
        
# Matrix wieder einlesen
with open("E://Matrix_org", 'r') as fobj_in:
    matrix_neu = [line.rstrip('\n') for line in fobj_in]

#for i in range(0,3):
#    matrix_liste.append(matrix_list[i].replace('"',''))
# entfernt leider nicht die String Quotes ""    
                 

print("\n ursprüngliche Matrix als Matrix_neu eingelesen\n", matrix_neu)

print("\n originale Matrix - es lassen sich die Elemente ausgegeben")
for i in range (0,5):
    print(matrix_org[1][i], end = ", ")
print()
          
print("\n Matrix nach einlesen - nun wird jeder einzelne Character ausgegeben")          
for i in range (0,5):
    print(matrix_neu[1][i], end = ", ")  

Re: Listen speichern und laden

Verfasst: Samstag 29. Januar 2022, 19:08
von Sirius3
Man benutzt keine for-Schleifen über einen Index und man benutzt die Stringrepräsentation von Objekten nicht zum Speichern.
Warum hat open zum Schreiben ein Encoding, zum Lesen aber nicht?
Alles in Python ist ein Objekt, das ist fobj_in wenig aussagekräftig.

Du brauchst ein Dateiformat, das diese Art von Daten auch speichern kann; da gibt es viele: csv, json, ...

Re: Listen speichern und laden

Verfasst: Montag 31. Januar 2022, 11:10
von KlausP
hmm ... fobj_in ist halt ein Name für ein einzulesendes File: 1000 mal in Büchern oder Foren verwendet; manchmal auch nur "f"

Ein paar Formate habe ich mir angesehen:
csv scheint nicht generell brauchbar zu sein.
json könnte ein gutes sein; werd ich mir noch genauer ansehen.

Habe aber jetzt mit den verdammten for - Schleifen einen Work-around gefunden, um im Moment bei den Daten und Anwendungen kompatibel zu bleiben.

Re: Listen speichern und laden

Verfasst: Montag 31. Januar 2022, 12:49
von __blackjack__
@KlausP: Das macht den Namen nicht besser.

Re: Listen speichern und laden

Verfasst: Montag 31. Januar 2022, 12:57
von Dennis89
KlausP hat geschrieben: Montag 31. Januar 2022, 11:10 1000 mal in Büchern oder Foren verwendet; manchmal auch nur "f"
Auch wenn alle einer Meinung sind, können sie sich trotzdem irren.

Die Namen sind ja nicht nur für dich. Du hast jetzt deinen Code veröffentlicht und brauchst Hilfe. Jeder der helfen will muss raten, was den so Namen mit den komischen Abkürzungen bedeuten. Jetzt ist es vielleicht noch übersichtlich, aber der Code wird erweitert und schnell musst du selbst immer wieder nachschauen, was die komische Abkürzung nochmal für einen Sinn hatte.
Naja ich hab es am Anfang auch nicht soo ernst genommen, seit dem ich es tue, ist das Programmieren und vorallem das Fehlerfinden wesentlich entspannter. Das beste ist, die zusätzlichen Buchstaben kosten nichts.


Grüße
Dennis

Re: Listen speichern und laden

Verfasst: Montag 31. Januar 2022, 13:48
von Schard
Bei Listen mit JSON-serialisierbaren Daten, wie in deinem Beispiel, würde ich zum speichern verwenden:

Code: Alles auswählen

from json import dump, load

matrix_org = [['c11', 'c12', '3', 'c13', 'r14', '5', '6a'],
              ['c11', '2', 'c13', 'r14', 7],
              ['c11', '2', 'r15', '5']]

print("die originale Matrix \n\n", matrix_org)

# Matrix speichern
with open("E://Matrix_org", 'w', encoding = "utf-8") as file:
    dump(matrix_org, file)

# Matrix wieder einlesen
with open("E://Matrix_org", 'r') as file:
    matrix_neu = load(file)

Re: Listen speichern und laden

Verfasst: Montag 31. Januar 2022, 14:30
von __blackjack__
Beim laden fehlt die Kodierungsangabe. Oder man öffnet in beiden Fällen die Datei im Binärmodus und lässt die Kodierungsangabe ganz weg, dann kümmern sich die Funktionen aus dem `json`-Modul schon darum.