[英]python: pickle object with a user defined class name and path
Here is the problem: I have a set of pickle files with objects and it takes large computing time (like ~2 months) to recreate those objects.问题是:我有一组带有对象的pickle文件,重新创建这些对象需要大量的计算时间(比如~2个月)。 I need to convert those objects (
class A
stored in file Av1.py
) into a new class ( class A
stored in file Av2.py
) objects but save them such that during loading pickle would search for class A
in Av1.py
such that later I could just rename Av2.py => Av1.py
and have the new objects interpreted as having type of class A
stored in the original file Av1.py
.我需要将这些对象(存储在文件
Av1.py
class A
)转换为一个新类(存储在文件Av2.py
class A
)对象,但要保存它们,以便在加载 pickle 期间会在Av1.py
搜索class A
,这样后来我可以重命名Av2.py => Av1.py
并将新对象解释为具有存储在原始文件Av1.py
的class A
类型。 How can I do it?我该怎么做?
Here is an example:下面是一个例子:
# Av1.py
class A:
def __init__(self, x):
self.x = x
# Av2.py
class A:
def __init__(self, y):
self.y = y
# python session 1
from Av1 import A as Av1
from Av2 import A as Av2
def convert(av1): return Av2(av1.x+1)
av1 = Av1(1)
av2 = convert(av1)
import pickle, gzip
with gzip.open('o.gzpkl', 'wb', compresslevel=9) as f:
pickle.dump(av2, f, protocol=pickle.HIGHEST_PROTOCOL)
mv Av2.py Av1.py # Linux shell command to rename file Av2.py into Av1.py
# python session 2
import pickle, gzip
with gzip.open('o.gzpkl', 'rb') as f:
av = pickle.load(f)
Expected result: python session 1
is modified such that python session 2
works and interprets the object in o.gzpkl
as having type Av1.A
.预期结果:
python session 1
被修改,使得python session 2
工作并将o.gzpkl
的对象解释为具有Av1.A
类型。
Thank you very much for your help!非常感谢您的帮助!
Here is the solution: I need to do the following before writing av2
这是解决方案:我需要在编写
av2
之前执行以下操作
av2.__class__ = Av1
ie python session 1
should be即
python session 1
应该是
from Av1 import A as Av1
from Av2 import A as Av2
def convert(av1): return Av2(av1.x+1)
av1 = Av1(1)
av2 = convert(av1)
av2.__class__ = Av1 # solution !!!!
import pickle, gzip
with gzip.open('o.gzpkl', 'wb', compresslevel=9) as f:
pickle.dump(av2, f, protocol=pickle.HIGHEST_PROTOCOL)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.