pickle序列化對象
如果希望透明地存儲 Python 對象,而不丟失其身份和類型等信息,則需要某種形式的對象序列化:它是一個將任意復雜的對象轉成對象的文本或二進制表示的過程。
同樣,必須能夠將對象經過序列化后的形式恢復到原有的對象。在 Python 中,這種序列化過程稱為 pickle,
可以將對象 pickle 成字符串、磁盤上的文件或者任何類似於文件的對象,也可以將這些字符串、文件或任何類似於文件的對象 unpickle 成原來的對象
代碼實例
import pickle
class MyPickle(object):
def __init__(self,file_name):
self.file_name = file_name
def dump(self,obj):
"""
序列化對象
:param obj:
:return:
"""
with open(self.file_name,'ab') as f:
pickle.dump(obj, f)
print('dump data',obj.__dict__)
def loaditer(self):
"""
迭代反序列化對象
:return:
"""
f = open(self.file_name, 'rb')
while True:
try:
obj = pickle.load(f)
yield obj
except EOFError:
print('EOFError')
f.close()
print(f.closed)
break
class Person:
def __init__(self,n,a):
self.name=n
self.age=a
def show(self):
print(self.name+"_"+str(self.age) )
aa = Person("aGood", 2)
bb = Person("bGood",3)
cc = Person("cGood",4)
p = MyPickle('c.txt')
p.dump(aa)
p.dump(bb)
p.dump(cc)
iter_obj = p.loaditer()
while True:
try:
print(next(iter_obj).__dict__)
except StopIteration:
print('stop')
break
輸出結果
dump data {'name': 'aGood', 'age': 2}
dump data {'name': 'bGood', 'age': 3}
dump data {'name': 'cGood', 'age': 4}
{'name': 'aGood', 'age': 2}
{'name': 'bGood', 'age': 3}
{'name': 'cGood', 'age': 4}
EOFError
True
stop
