kann man ein dictionary in einen String umformen?
Lena, wie heißt eigentlich die Python Anleitung, aus der du lernst?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Code: Alles auswählen
# dictionary zu string
a = {"A": 1, "B": (1,2), "C": "eins-zwei-drei", (2,3): [["A"],1,2,3], "44": None}
a_str = str(a)
print( a_str) # {'A': 1, 'C': 'eins-zwei-drei', 'B': (1, 2), (2, 3): [['A'], 1, 2, 3], '44': None}
open("dict.txt", "w").write(a_str)
# string zu dictionary
b_str = open("dict.txt", "r").readline()
b = eval(b_str)
print( b) # {'A': 1, 'C': 'eins-zwei-drei', 'B': (1, 2), (2, 3): [['A'], 1, 2, 3], '44': None}
Jaaa super, `eval()`… Damit wird Lena wahrscheinlich ab sofort sehr viel ”lösen”.
Andere Leute schreiben Parser, ich benutze Python, in Python ist der Parser fest eingebaut, die Schnittstelle zum Parsen mit Python ist die Funktion eval().
@MagBen: `eval()` ist nicht die Schnittstelle zum parsen sondern um beliebige Python-Ausdrücke *auszuwerten*, also mit Kanonen auf Spatzen geschossen und ein Sicherheitsrisiko. Es gibt wirklich kaum Anwendungsfälle für die Funktion und Datenpersistenz ganz bestimmt nicht. Es wurde Lena nun schon mehrfach JSON empfohlen, was ja auch in der Standardbibliothek abgedeckt ist, man sich also gar nichts selber schreiben braucht, und das nicht nur sicherer ist, sondern auch ein Standardformat was ausserhalb von Python gelesen und geschrieben werden kann und ja auch wird.
Selbst wenn man bei Python-Syntax für die gespeicherten Daten bleiben will ist `eval()` unnötig, denn für das sichere auswerten von Quelltext mit Python-Grunddatentypen gibt es im `ast`-Modul die `literal_eval()`-Funktion. Ich sehe aber echt keinen Grund warum man Daten in Python-Syntax speichern sollte. Das ist potentiell gefährlich und eine Sackgasse.
Selbst wenn man bei Python-Syntax für die gespeicherten Daten bleiben will ist `eval()` unnötig, denn für das sichere auswerten von Quelltext mit Python-Grunddatentypen gibt es im `ast`-Modul die `literal_eval()`-Funktion. Ich sehe aber echt keinen Grund warum man Daten in Python-Syntax speichern sollte. Das ist potentiell gefährlich und eine Sackgasse.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Und jetzt mit JSON
Waaaaahnsinn. Genau so viel Code und kein Schuss ins Knie.
@Lena: Mit der Herangehensweise machst du dir keine Freunde und wie du vielleicht schon an den Antworten siehst vergeht den Leuten die Lust zu helfen. Du bist mit deinen Fragen absolut willkommen, aber wenn du Vorschlaege ignorierst und man keine Verbesserung merkt ist das demotivierend.
Code: Alles auswählen
import json
# dictionary zu string
a = {"A": 1, "B": (1,2), "C": "eins-zwei-drei", (2,3): [["A"],1,2,3], "44": None}
a_str = json.dumps(a)
print(a_str) # {'A': 1, 'C': 'eins-zwei-drei', 'B': (1, 2), (2, 3): [['A'], 1, 2, 3], '44': None}
with open("dict.json", "w") as f:
json.dump(a)
# string zu dictionary
with open("dict.txt", "r") as f:
b = json.load(f)
print( b) # {'A': 1, 'C': 'eins-zwei-drei', 'B': (1, 2), (2, 3): [['A'], 1, 2, 3], '44': None}
@Lena: Mit der Herangehensweise machst du dir keine Freunde und wie du vielleicht schon an den Antworten siehst vergeht den Leuten die Lust zu helfen. Du bist mit deinen Fragen absolut willkommen, aber wenn du Vorschlaege ignorierst und man keine Verbesserung merkt ist das demotivierend.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
nicht ins Knie, aber:cofi hat geschrieben:und kein Schuss ins Knie.
Code: Alles auswählen
Traceback (most recent call last):
File "/home/.../scratch/json_str.py", line 4, in <module>
a_str = json.dumps(a)
File "/usr/lib/python2.7/json/__init__.py", line 243, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
TypeError: keys must be a string