@shIxx: Warum dachtest Du das "+" das bedeutet? Kann man auch einfach ausprobieren:
Code: Alles auswählen
In [48]: f = open("gibtsnich.xxl", "r+")
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-48-bf83ef210cec> in <module>
----> 1 f = open("gibtsnich.xxl", "r+")
FileNotFoundError: [Errno 2] No such file or directory: 'gibtsnich.xxl'
Man sollte immer ``with`` verwenden wenn das geht. Andernfalls müsste man mehr Zeilen mit ``try``/``finally`` schreiben um das gleiche zu erreichen.
`open()` hat ein `endoding`-Argument. Und JSON an sich ist zwar nur auf ASCII definiert, aber JSON-Lines legt UTF-8 nahe und wenn sich JSON-Dokumente in freier Wildbahn nicht auf ASCII beschränken, sind sie in 99,9% der Fälle UTF-8 kodiert.
Die erste Zuweisung an `user_input` hat in dem Programm letztlich überhaupt gar keinen Effekt. Was sollte da warum zu einer Liste werden wenn die Zeile nicht vorhanden ist?
Wörterbücher machen immer dann Sinn wenn man Schlüssel auf Werte abbilden möchte. Also zum Beispiel um einen Kunden zu beschreiben der aus verschiedenen Eigenschaften besteht.
Falls "Kundenstamm" eigentlich "Kunde" heissen soll, stellt sich die Frage wofür das äussere Wörterbuch gut sein soll? Wenn es nur ein Kunde sein kann braucht man es nicht. Wenn es verschiedene Typen gibt, dann wäre das eher ein Schlüssel "Typ" mit dem Wert "Kunde" im inneren Wörterbuch.
JSON hat Zahlen als Datentyp. JSON hat eine ziemlich kompakte Spezifikation:
https://json.org und in der Dokumentation zum JSON-Modul steht wie Datentypen zwischen JSON und Python abgebildet werden. In einer Textdatei serialisiert ist dann letztlich natürlich alles Text, aber wenn man die Daten wieder deserialisiert werden wieder die entsprechenden Python-Datentypen daraus:
Code: Alles auswählen
In [52]: json.dumps([42, "4711"])
Out[52]: '[42, "4711"]'