Teile beim Auslesen ignorieren?

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
Eutermän
User
Beiträge: 2
Registriert: Donnerstag 7. Dezember 2017, 13:28

Moin! Bin ganz neu hier, da ich auf meine Frage keinelei anderen Ausweg sehe, als in Foren zu fragen.
Ich habe aus einer Excel Tabelle personenbezogene Daten in eine Textdatei geschrieben, diese in einem anderen Programm erfolgreich in ein Dictionary umgewandelt und dieses in einer anderen Textdatei wiederum als String abgespeichert. Das ist notwendig um dieser Textdatei andere Daten aus anderen Quellen hinzuzufügen.
Das Dictionary sieht ungefähr aus: {"Vorname": "Peter", "Nachname": "Petersen", "Stra\u00dfe + Hausnummer": "Peterstr. 1", "PLZ": "12345", "Wohnort": "Peterhausen", "Telefon": "01234 29124", "Mobil": "0176 2131221", "Email": "peter.peter@peter.de", "Felder": ["Peters Zeltlager", "450€ Kraft"]} "\n"
*nächster Eintrag*
Das ist der Code mit dem er den String in ein Dictionary umwandeln soll:

Code: Alles auswählen

export = open("exports.txt","r")
export_s = export.read()
export_list = list(export_s.split('\n'))
print(export_list)
export_dict = {}

for item in export_list:
    export_dict.update(i.split(':') for i in item.split(','))

print(export_dict)
Wobei folgender Fehler auftritt:
line 8, in <module>
export_dict.update(i.split(':') for i in item.split(','))
ValueError: dictionary update sequence element #9 has length 1; 2 is required

Ich vermute, dass der Fehler darin besteht, dass innerhalb der Liste (Key: Felder) auch Kommata sind und das Programm deswegen versucht auch an dieser Stelle zu 'splitten'.
Nun zur eigentlichen Frage: Gibt es eine Möglichkeit diese Liste oder die Kommata darin zu ignorieren? Oder hat jemand einen mir bisher unerschließbaren anderen Lösungsansatz?

Würde mich über eine Antwort freuen
Gruß
Eutermän
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Eutermän: Dein selbst erfundenes Format hat viele Probleme: Trennzeichen, Sonderzeichen, Zeilenumbrüche, etc. Wenn ich das richtig sehe, gibt es sogar noch Unterstrukturen, die noch gar nicht vom Format abgebildet werden.

Statt Dir selbst was zu erfinden, benutze bereits vorhandene Formate, je nach Anwendungszweck bleibst Du bei Excel (Modul: openpyxl), dann sparst Du Dir die drei Konvertierungsschritte, nimmst JSON oder JSON-Lines (Modul json) oder eine Datenbank (Modul sqlite).
Eutermän
User
Beiträge: 2
Registriert: Donnerstag 7. Dezember 2017, 13:28

@Sirius3 Danke für die schnelle Antwort und Ja ok, das sehe ich ein :lol:
Werde mich da mal reinlesen. Ich kannte bisher nur den SQL Ansatz und den fand' ich an diesem Beispiel fast etwas zu aufwendig, hätte es so geklappt ^^'

Aber hättest du auch einen Vorschlag wie ich das Ganze in "meinem Format" löse?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Eutermän: Dein Format ist kaputt, also mußt Du ein besseres erfinden, oder eben schon ein existierendes benutzen; wobei ich Dir nicht helfen werde, ein eigenes zu erfinden :wink: .
Antworten