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