如何保存对python对象的更改?

时间:2016-06-02 05:52:47

标签: python object dictionary pickle savechanges

我有一个我在一个文件中创建的类的对象的Python字典。它的格式为{string : object},有几个键值对。

我的目标是在单独的文件中的某个方法中执行某些操作,该文件更改字典中某些对象的属性,并将这些更改保存到这些对象中,同时将它们保留在字典中。

我尝试过使用pickle,但它似乎没有保存对字典中对象的更改。

我现在正在做什么的基本想法以及它有什么问题:

文件#1:

class A:    
    def __init__(self):
        self.value = 0

a = A()
dict = {"Test" : a}
pickle.dump(dict, open("save.p", "wb"))

文件#2:

dict = pickle.load(open("save.p", "rb"))
dict["Test"].value += 1
print(dict["Test"].value)
pickle.dump(dict, open("save.p", "wb"))

因此,当我第一次运行文件#2时,它应该打印1,并且确实如此 但是当我第二次运行文件#2时,我希望它打印2,但它再次打印1,因为没有保存对值的更改。

可能是我错误地使用泡菜......

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

来自pickle documentation

  

请注意,没有任何类的代码或数据被腌制

请参阅pickling class instances了解正确的方法。

同样,class A在unpickling环境中不存在,这不是一件好事,如果我正确阅读文档,则类名会被取消。

BTW我使用json而不是pickle,因此您可以在两次运行之间打开文件并自行检查以了解发生的情况。使用json优于pickle,以及使用pickle而不是json时,有一些优势,这里是comparison between pickle and json

哦,并且,避免命名变量dict或任何现有内置函数,它会遮挡它们并导致非常奇怪的行为。