将cPickled对象迁移到具有相同\uu getstate \uuuuuu形式的新类

2024-09-28 20:53:43 发布

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

我使用cPickle来序列化和反序列化类的实例。我最近将一些类移到了不同的包中,现在我注意到cPickle/pickle存储了类名和它来自的包

>>> class A(object):
    pass

>>> dumps(A())
'ccopy_reg\n_reconstructor\np1\n(c__main__\nA\np2\nc__builtin__\nobject\np3\nNtRp4\n.'

注意__main__是如何存储的,因为我在主python解释器中运行了该代码

如果我尝试用这种方式取消拾取存储的许多对象,我会得到一个ImportError的抱怨,因为我移动了这些类,所以旧类不存在于预期的位置

我没有更改__getstate____setstate__的格式。我只更改了需要反序列化的类的位置。有没有办法迁移这些对象,这样我就不会遇到问题


Tags: 对象实例序列化objectmainpassregpickle
1条回答
网友
1楼 · 发布于 2024-09-28 20:53:43

如果要迁移数据,必须在旧位置提供对新对象的引用,然后再次转储数据:

old_location.A = new_location.A
data = loads(pickle_data)
pickle_data = dumps(data)

现在,pickle_data包含对new_location.A的引用

相关问题 更多 >