diese Reihe liegt als str in der Variablenliste: {"Wert1": "10", "Wert2": "50", "Wert3": "80"}
wie kann man das in eine dict wandeln?
stringreihe in dict wandeln
- __blackjack__
- User
- Beiträge: 13163
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@oldboyJR: Was ist eine „Variablenliste“ in diesem Kontext? Falls das was da steht in einer Zeichenkette vorliegt, dann ist das JSON und kann mit dem `json`-Modul aus der Standardbibliothek geparst werden:
Um zu klären ob das *immer* geht, oder nur mit diesem Beispiel, müsste man wissen ob das wirklich JSON ist, oder nur zufällig *auch* gültiges JSON ist.
Code: Alles auswählen
In [132]: text = '{"Wert1": "10", "Wert2": "50", "Wert3": "80"}'
In [133]: import json
In [134]: data = json.loads(text)
In [135]: data
Out[135]: {'Wert1': '10', 'Wert2': '50', 'Wert3': '80'}
In [136]: type(data)
Out[136]: dict
In [137]: data["Wert1"]
Out[137]: '10'
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Ich habe ein wenig probiert und habe folgendes Listing:
ich hatte nun gehofft das ich damit eine Dictionary beim lesen erhalte. Aber es ist ein langer String
Nun manchmal gibt es Irrtümer und nicht mehr aktuelle LIstings aber dank deiner Antwort habe ich meine Lesebaustein vervollständigt.
Nun gibt es eine Möglichkeit mehr ein dict in eine txt zu schreiben und zu lesen.
Der allgemeine Zweck ist sich den Umweg über Framwork und Co für den Anfänger zu sparen.
Entweder man baut sich sowas wie eine globale Variable oder Classe (gefährlich)die von überall erreichbar ist oder man benutzt framworks und co zum hineinschreiben die dann ebenfals von überall her eingelesen und zurückgeschrieben werden kann (ich nenne es mal virtuell Global) denn werden die so erzeugten Windows geschlossen werden existieren sie nicht mehr Das schreiben in eine Datei macht die werte persistent.
In eurer Sammlung viewtopic.php?p=37898&hilit=Datenspeich ... hon#p37898 hatte ich mir alle angesehen und heute morgen nochmals das pickle modul vorgenommen. Mit dem ich zuvor nicht klar gekommen bin. Ich glaube da gab es ein update welches nicht berücksichtigt wurde bzw. welches das schreiben und lesen von dict erleichtert
wie man sieht ist die eckige Klammer nicht mehr nötig und zum lesen:
Code: Alles auswählen
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 25 11:01:27 2024
@author: GBT B650M GamingX AX
"""
import io
#with open("ausgabe.txt", "r") as f:
# print(f.read())
# Schreiben
Wert1 = 10
Wert2 = 50
Wert3 = 80
wert1 = str(Wert1)
wert2 = str(Wert2)
wert3 = str(Wert3)
s = '{"Wert1": '+'"'+str(wert1)+'"'+',\n"Wert2": '+'"'+ str (wert2)+'"'+',\n "Wert3": '+'"'+str(wert3)+'"}'
with open("arg7.txt", "w") as f:
f.write(s)
f.close()
Nun manchmal gibt es Irrtümer und nicht mehr aktuelle LIstings aber dank deiner Antwort habe ich meine Lesebaustein vervollständigt.
Code: Alles auswählen
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 25 00:53:35 2024
@author: GBT B650M GamingX AX
"""
import json
with open("arg7.txt", "r") as f:
s = (f.read())
data = json.loads(s)
print (data)
Der allgemeine Zweck ist sich den Umweg über Framwork und Co für den Anfänger zu sparen.
Entweder man baut sich sowas wie eine globale Variable oder Classe (gefährlich)die von überall erreichbar ist oder man benutzt framworks und co zum hineinschreiben die dann ebenfals von überall her eingelesen und zurückgeschrieben werden kann (ich nenne es mal virtuell Global) denn werden die so erzeugten Windows geschlossen werden existieren sie nicht mehr Das schreiben in eine Datei macht die werte persistent.
In eurer Sammlung viewtopic.php?p=37898&hilit=Datenspeich ... hon#p37898 hatte ich mir alle angesehen und heute morgen nochmals das pickle modul vorgenommen. Mit dem ich zuvor nicht klar gekommen bin. Ich glaube da gab es ein update welches nicht berücksichtigt wurde bzw. welches das schreiben und lesen von dict erleichtert
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
#!/usr/bin/env python
#Schreibt ein dict in eine Datei .bin
import pickle
from pathlib import Path
# Schreiben
s = {"Wert1": "dat1",
"Wert2": "dat2",
"Wert3": "dat3",
"Wert4": "dat4",
"Wert5": "dat5",
"Wert6": "dat6"
}
print(s)
a = 50 # diese Zeile habe ich eingefügt um zu zeigen das man einen Wert aus dem Programm
s["Wert1"] = str(a)#in einen Wert eines dict überführen kann
print(s)
path = Path.home() / "ad.bin"
with path.open("wb") as f:
pickle.dump(s, f)
f.close()
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
#!/usr/bin/env python
"""
Created on Wed Apr 24 12:43:45 2024
@author: GBT B650M GamingX AX
"""
import pickle
from pathlib import Path
path = Path.home() / "ad.bin"
with path.open("rb") as f:
s = pickle.load(f)
print(s)
print(s['Wert1'])
Du importierst io, benutzt es aber nicht. Variablennamen nummeriert man nicht durch und schreibt sie komplett klein. Was ist der Unterschied zwischen `Wert1` und `wert1` und wie soll das jemand, der den späteren Programmcode liest, unterscheiden? Warum wandelst Du Strings nochmal in Strings um? Strings setzt man nicht mit + zusammen, sondern benutzt f-Strings. Das close ist bei Benutzung von with überflüssig.oldboyJR hat geschrieben: ↑Donnerstag 25. April 2024, 23:35 Ich habe ein wenig probiert und habe folgendes Listing:Code: Alles auswählen
# -*- coding: utf-8 -*- """ Created on Thu Apr 25 11:01:27 2024 @author: GBT B650M GamingX AX """ import io #with open("ausgabe.txt", "r") as f: # print(f.read()) # Schreiben Wert1 = 10 Wert2 = 50 Wert3 = 80 wert1 = str(Wert1) wert2 = str(Wert2) wert3 = str(Wert3) s = '{"Wert1": '+'"'+str(wert1)+'"'+',\n"Wert2": '+'"'+ str (wert2)+'"'+',\n "Wert3": '+'"'+str(wert3)+'"}' with open("arg7.txt", "w") as f: f.write(s) f.close()
Es bleibt also:
Code: Alles auswählen
wert1 = 10
wert2 = 50
wert3 = 80
text = f'{{"Wert1": "{wert1}",\n"Wert2": "{wert2}",\n"Wert3": "{wert3}"}}'
with open("arg7.txt", "w", encoding="utf8") as output:
output.write(text)
Code: Alles auswählen
werte = {
"Wert1": "10",
"Wert2": "50",
"Wert3": "80"
}
text = "{%s}" % ",\n".join(f'"{key}": "{value}" for key, value in werte.items())
with open("arg7.txt", "w", encoding="utf8") as output:
output.write(text)
Code: Alles auswählen
werte = {
"Wert1": "10",
"Wert2": "50",
"Wert3": "80"
}
with open("arg7.txt", "w", encoding="utf8") as output:
json.dump(werte, output)