pickle提供了一种持久化功能,可以将对象序列化并保存到文件中,也可以将文件中的数据流反序列化成对象。

  pickle.dump() 和 pickle.load() 是两个基本方法,分别实现序列化与反序列化。

  pickle.dumps() 和 pickle.loads() 也分别实现序列化与反序列化,但是针对的是bytes形式对象,不常用。

  另外,反序列化时需要注意:当前模块中需要含有类的定义,否则反序列化失败报错。 

  pickle.dump(obj,file,protocol)中参数protocol:默认为0(按文本方式写入),设置为1(传统二进制形式写入),设置为2(新式二进制形式写入)。

#-----------------------------pickle--------------------------

import pickle

class A:
    def __init__(self,arg):
        self.name = arg
    def show(self):
        print(self.name)

a = A('lucy')   # output:lucy
a.show()
# 序列化对象,载入文件
# 注意1:python中对象最好以字节流方式处理。
with open('p.txt','wb') as f:
    pickle.dump(a,f,1)

# del A
# 注意2:当前模块找不到类的注释,反序列化对象时会报错
# AttributeError: Can't get attribute 'A' on <module '__main__' from 'D:/pycharm/dongxuew/hello_world.py'>

# 反序列化对象,导入程序
with open('p.txt','rb') as f:
    b = pickle.load(f)
b.show()        # output:lucy