【问题标题】:Save to file and load an instance of a python class with its attributes保存到文件并加载 python 类的实例及其属性
【发布时间】:2013-06-20 16:58:12
【问题描述】:

我正在使用 python 进行数据分析,并希望找到一种将类的实例保存到文件的好方法,以便以后可以在保留其属性值的情况下重新加载它。特别是,此类的实例将加载作为其他类实例的对象,然后执行需要一段时间才能完成的处理器密集型比较。

例如:

import pickle

class MyClass():
    def __init__(self):
        self.info = OtherClass(option=1)

    def pickle(self):
        f = file('test_file', 'wb')
        pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
        f.close()

    def unpickle(self):
        f = file('test_file', 'rb')
        pickle.load(f)
        f.close()


class OtherClass():
    def __init__(self, option):
        self.property = option * 2


mydata = MyClass(option=5)

mydata.pickle()

然后稍后导入此模块并运行 mydata.unpickle() 以取回 mydata(我还有一个选项,用于查找文件之前是否已被腌制过,如果有,则暂停 OtherClass 实例的计算和调用)。 现在,如果我这样做,我可以加载 mydata,但它不再具有 mydata.info 对象。我的理解是这是pickle的故意部分,但是有没有办法完全保存mydata以便我以后可以使用它?

【问题讨论】:

    标签: python class attributes instance pickle


    【解决方案1】:

    您没有对已加载的数据进行任何操作。

    class MyClass():
        ...
        @staticmethod
        def unpickle():
            with file('test_file', 'rb') as f:
                return pickle.load(f)
    
    data = MyClass.unpickle()
    

    【讨论】:

    • 哎呀。是的,就是这样。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多