如何使对字典的更改持久化?

时间:2019-01-13 03:43:14

标签: python dictionary persistence

我正在尝试制作一个小型应用程序,该应用程序将根据存储的材料/浓度指标来计算电荷量。
字典不时需要更新和存储以备将来使用。

下面的代码片段要求用户为字典提供新值,然后对其进行更新。

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)

问题在于重新启动外壳程序时,baseDict返回到原始值。
我在2010年左右就找到了类似问题的解决方案,但是它们使用Pickle,shelfve,JSON将dict存储/检索到一个单独的文件中,并在每次运行代码时将其加载。

我打算将代码转换成一个小的.exe文件,以便在无py计算机上运行。
在这种环境下如何使baseDict保持更新的任何建议将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以将其保存为txt,然后重新加载。

因此,请自己运行代码,如下所示:

with open('test.txt','w') as f:
    f.write("{'a':10, 'b':20, 'c':30, 'd':40}")

然后,用下面的代码运行另一个模块:

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))

答案 1 :(得分:0)

据我所知,保持此类更改的唯一方法是使用本地存储。 Jsons,文本文件,数据库都可以,甚至您可以创建自己的编码类型的文件。不过,大多数应用程序都需要安装,也许您可​​以选择加密您的数据并将其存储在秘密文件中的目录中,由应用程序在安装过程中创建。

答案 2 :(得分:0)

使用pg_triggerjson比保存纯文本并pickle更好。我会推荐ast.literal_eval

对于json,首先运行一次:

json

然后:

import json

with open('baseDict.json', 'w') as f:
    json.dump({'a':10, 'b':20, 'c':30, 'd':40}, f)

请参阅here,了解为什么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) json更好。