J'essaie de créer une petite application qui calculerait le poids de la charge en fonction de la définition stockée des matériaux / concentrations.
De temps en temps, le dict doit être mis à jour et stocké pour une utilisation future.
L'extrait ci-dessous demande à un utilisateur de fournir de nouvelles valeurs pour le dict, puis le met à jour.
baseDict={'a':10, 'b':20, 'c':30, 'd':40} def updateDict(key, value): temp = {key : value} baseDict.update(temp) return baseDict key = str(input('Enter key\n')) value = input('Enter value\n') baseDict = updateDict(key, value)
Le problème est que lorsque le shell est redémarré, le baseDict revient aux valeurs d'origine.
J'ai trouvé des solutions pour une question similaire à partir de ~ 2010, mais ils utilisent Pickle, shelve, JSON pour stocker / récupérer le dict dans un fichier séparé et le charger à chaque fois que le code est exécuté.
Je prévois de transformez le code en un petit fichier .exe à exécuter sur un ordinateur sans py.
Toute suggestion sur la façon de mettre à jour baseDict dans un tel environnement serait grandement appréciée.
Merci!
3 Réponses :
Vous pouvez l'enregistrer au format txt, puis le recharger.
Exécutez donc un code par lui-même, comme ci-dessous:
import ast with open('test.txt','r') as f: baseDict=ast.literal_eval(f.read().rstrip()) def updateDict(key, value): temp = {key : value} baseDict.update(temp) return baseDict key = str(input('Enter key\n')) value = input('Enter value\n') baseDict = updateDict(key, value) with open('test.txt','w') as f: f.write(str(baseDict))
Ensuite, exécutez un autre module avec le code ci-dessous:
with open('test.txt','w') as f: f.write("{'a':10, 'b':20, 'c':30, 'd':40}")
@ Smith788483 N'oubliez pas d'accepter ma réponse si cela fonctionne :-), veuillez également voter si cela fonctionne: D
@ Smith788483 Heureux d'aider, :-), 😊😊😊
@ Smith788483 Acceptez d'abord ma réponse, vous obtiendrez +2 de réputation, puis vous pourrez voter :-)
@ Smith788483 De plus, vous obtiendrez un badge pour accepter :-)
LOL ... Je vois comment ça marche :) Eh bien ... gardons-le ouvert un peu avant d'accepter, voyons quelles autres solutions existent :)
@ Smith788483 J'ai cherché partout, en fait, ma réponse est la seule.
Comme je le sais, la seule façon de conserver les modifications de ce type est d'utiliser le stockage local. Cela peut être avec Jsons, des fichiers texte, des bases de données, même si vous pouvez créer votre propre type de fichier encodé. Cependant, la majorité des applications doivent être installées, peut-être que vous pouvez inscrire vos données et les stocker dans des fichiers secrets dans un répertoire créé par l'application lors du processus d'installation.
Merci Andres. Cela aide vraiment beaucoup!
Il est préférable d'utiliser json
ou pickle
que d'enregistrer le texte brut et de le ast.literal_eval
. Je recommanderais json
:
Pour json
, exécutez d'abord ceci une fois:
import json with open('baseDict.json','r') as f: baseDict = json.load(f) # your code with open('baseDict.json', 'w') as f: json.dump(baseDict, f)
Ensuite: p >
import json with open('baseDict.json', 'w') as f: json.dump({'a':10, 'b':20, 'c':30, 'd':40}, f)
Voir ici pour savoir pourquoi json
est meilleur que ast.literal_eval
.
Merci, Timothy. J'apprécie la ligne d'explication.
json fait partie de la bibliothèque principale de python. Pourquoi ne voudriez-vous pas l'utiliser?
Merci pour le commentaire, John. Je veux rendre le programme aussi autonome que possible. Puis-je utiliser JSON et toujours transformer le code en .exe? qu'en est-il d'ajouter une interface graphique avec tkinter avant exe?
Il semble que vous souhaitiez mélanger les données utilisateur et le code. Ce n'est pas une bonne idée.