【问题标题】:How to save changes to a python object?如何保存对 python 对象的更改?
【发布时间】:2016-06-02 05:52:46
【问题描述】:

我有一个 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,它确实 但是当我第二次运行 File #2 时,我希望它打印 2,但它再次打印 1,因为没有保存对值的更改。

可能是我用错了泡菜……

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

【问题讨论】:

    标签: python object dictionary pickle savechanges


    【解决方案1】:

    来自pickle documentation

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

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

    class A 在 unpickling 环境中也不存在,这不是一件好事,如果我正确阅读了文档,类会按名称解开。

    顺便说一句,我会使用json 而不是pickle,这样您就可以在两次运行之间打开文件并自行检查以了解发生了什么。使用json 优于pickle 有一些优势,使用pickle 优于json 有一些优势,这里是comparison between pickle and json

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 2011-03-26
      • 1970-01-01
      • 2012-11-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多