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