我正在尝试使用python的pickle将大量自定义类序列化到磁盘。但是,这些类没有正确序列化。
看了docs我的理解是什么,我应该做的,但也许这不仅仅是因为我不理解某些东西。
我的课程在模块的顶层定义。并且在尝试pickle时没有触发PicklingError异常。
这是我的示例代码。取消注释Save()以序列化;取消注释Load()以加载。加载时,未填充Term的Synonyms数组,但正在反序列化Term的Main对象。您可以通过检查从Load()函数返回的“loadedTerms”对象来看到这一点。
我做错了什么?谢谢。
import pickle
class Entry:
Text = ""
def __init__(self, text):
self.Text = text
class Term:
Main = None
Synonyms = []
def Save():
term = Term()
term.Main = Entry("Dog")
term.Synonyms.append(Entry("Canine"))
term.Synonyms.append(Entry("Pursue"))
term.Synonyms.append(Entry("Follow"))
term.Synonyms.append(Entry("Plague"))
terms = []
terms.append(term)
with open('output.pickle', 'wb') as p:
pickle.dump(terms, p)
def Load():
loadedTerms = []
with open('output.pickle', 'rb') as p:
loadedTerms = pickle.load(p)
return loadedTerms
#Save()
#terms = Load()
答案 0 :(得分:2)
Pickle仅保存类的实例属性,但Synonyms
是一个在类级别定义的列表。您应该使用__init__
方法创建列表:
import pickle
class Entry:
def __init__(self, text):
self.Text = text
class Term:
def __init__(self):
self.Main = None
self.Synonyms = []
def Save():
term = Term()
term.Main = Entry("Dog")
term.Synonyms.append(Entry("Canine"))
term.Synonyms.append(Entry("Pursue"))
term.Synonyms.append(Entry("Follow"))
term.Synonyms.append(Entry("Plague"))
terms = []
terms.append(term)
with open('output.pickle', 'wb') as p:
pickle.dump(terms, p)
def Load():
with open('output.pickle', 'rb') as p:
loadedTerms = pickle.load(p)
return loadedTerms