Json datei Doppelte Einträge verhindern ?

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
Backware
User
Beiträge: 4
Registriert: Samstag 15. August 2020, 14:52

Hallo arbeite gerade an ein Python Project.

Würde gerne einfache Doppelte Einträge verhindere
habe es schon hiermit probiert

Code: Alles auswählen

    
    with open('welcome.json', 'r+') as f:
        i = json.load(f)
    
    if Wohnort in i:
        print('Wurde gefunden:')
    else:
        print('Wurde nicht gefunden?')
        i[Wohnort] = Frankfurt
        with open('welcome.json', 'w') as f:
            json.dump(i, f, indent=4)
        
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Das kommt auf die Datenstrukur an, die sich in der json-Datei verbirgt.

Variablennamen schreibt man in in Python klein_mit_unterstrich. "i" ist ein schlechter Name für eine Variable, an die ein json-Objekt gebunden wird.

Dein Code funktioniert nicht. Sowohl "Frankfurt" als auch "Wohnort" sind nicht definiert.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ein Wörterbuch erlaubt keine doppelten Einträge. Dein Problem ist also schon gelöst.
`r+` ist nie ein sinnvoller Dateimodus. Bei Text-Dateien immer ein Encoding angeben, bei JSON ist das immer UTF8. Variablennamen schreibt man komplett klein und einbuchstabige Variablennamen sind schlecht, weil sie nichts aussagen. Auch welcome.json sagt jetzt nicht wirklich, dass da ein Wörterbuch mit Wohnorten drin steht.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

JSON-Dateien öffne ich mittlerweile zum Lesen immer im Binärmodus, denn das `json`-Modul ermittelt dann selbst in welcher UTF-*-Variante die Daten vorliegen. Bin da neulich mal über eine UTF-16-kodierte Datei gestolpert. Schreiben dann immer explizit als UTF-8.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten