[英]python: pickle object with a user defined class name and path
問題是:我有一組帶有對象的pickle文件,重新創建這些對象需要大量的計算時間(比如~2個月)。 我需要將這些對象(存儲在文件Av1.py
class A
)轉換為一個新類(存儲在文件Av2.py
class A
)對象,但要保存它們,以便在加載 pickle 期間會在Av1.py
搜索class A
,這樣后來我可以重命名Av2.py => Av1.py
並將新對象解釋為具有存儲在原始文件Av1.py
的class A
類型。 我該怎么做?
下面是一個例子:
# 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)
預期結果: python session 1
被修改,使得python session 2
工作並將o.gzpkl
的對象解釋為具有Av1.A
類型。
非常感謝您的幫助!
這是解決方案:我需要在編寫av2
之前執行以下操作
av2.__class__ = Av1
即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.