用户可以一次提取并重新加载所有变量吗?自动保存功能的想法

2024-06-06 21:04:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将所有全局变量保存到pickle文件中,然后重新加载pickle文件并让它检索所有pickle值并将它们放回原始变量中。这将是我正在编写的一个数据库程序的自动保存功能的基础,因此,如果您想结束该日志记录会话,脚本将自动保存整个环境变量,以便您以后可以轻松地重新加载它,并继续保持保存前的状态。在

我不知道怎么做。下面的代码可以工作,但是如果您查看变量的第二次打印,那么全局变量(ab&c)仍然是清零的,而不是从pickle中重新填充。在

有没有可能一次性重新分配所有的全局变量?我错过了什么?在

import pickle

global a,b,c

a = 1
b = 2
c = 3

print (globals())

AutoPickleFile = open('z:\\Pickle.txt','wb')
pickle.dump(globals, AutoPickleFile)
AutoPickleFile.close()

a = 0
b = 0
c = 0

AutoPickleFile = open('z:\\Pickle.txt','rb')
globals = pickle.load(AutoPickleFile)
AutoPickleFile.close()

print (globals())

Tags: 文件程序功能txt数据库close记录open
2条回答

最好使用JSON或其他数据格式序列化的“名称空间”。那么装载和卸载就会干净得多。。。在

例如。。在

vars = {}
vars["a"] = 444
a = open("test.json", "w")
a.write(json.dumps(vars))
a.close()
vars = json.loads(open("test.json"))

Pickle是不可靠的,而且非常特定于python,从长远来看,以更好的格式进行操作要好得多。在

首先,这是个坏主意。在

globals()包含的不仅仅是ab和{};pickle模块也是模块中的一个全局变量。此外,globals()映射还包含对__builtins__对象的引用,所有的Python内置程序都在其中,包括globals()函数本身。你不需要腌这些东西。在

坚持腌制就是你需要坚持的:

 with open('z:\\Pickle.txt', 'wb') as AutoPickleFile:
     pickle.dump((a, b, c), AutoPickleFile)

并再次加载:

^{pr2}$

您试图将内置函数globals作为字典的引用;您必须调用该函数来访问pickle的映射。在

相关问题 更多 >