Listen speichern und laden

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
KlausP
User
Beiträge: 60
Registriert: Mittwoch 8. Juli 2020, 17:00

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 = ", ")  
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

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, ...
KlausP
User
Beiträge: 60
Registriert: Mittwoch 8. Juli 2020, 17:00

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@KlausP: Das macht den Namen nicht besser.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
Dennis89
User
Beiträge: 1538
Registriert: Freitag 11. Dezember 2020, 15:13

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
"When I got the music, I got a place to go" [Rancid, 1993]
Schard
User
Beiträge: 16
Registriert: Freitag 25. Dezember 2020, 01:23
Wohnort: Hannover

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)
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten