pickle 模块实现用于序列化和反序列化 Python 对象结构的二进制协议。“pickling”是将 Python 对象层次结构转换为字节流的过程,“unpickling”是反向操作,即将字节流(来自二进制文件或类
似字节的对象)转换回对象层次结构。“pickling”也称为“序列化”“编组”或“扁平化”,而“unpickling”称为“反序列化”。为避免混淆,应尽量使用术语“pickling”和“unpickling”。
pickle 模块有两类函数 dump()和 load()分别执行“pickling” 和 “unpickling”操作。
pickle.dumps(obj, protocol=None, *, fix_imports=True)将一个 Python 对象转换成一个 bytes 类型的字节串对象。
pickle.dump(obj, file, protocol=None, *, fix_imports=True)将一个 Python 对象转换成一个 bytes 类型字节串对象,并保存到文件中。
pickle.loads(bytes_object, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)将已经序列化(picked)的 bytes 类型字节串 bytes_object 恢复成 Python 类型对象。
pickle.load(file, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)从打开的文件对象中读取已经序列化(picked)的 bytes 字节串,并恢复为 Python 类型对象。
其中的参数说明如下。
- obj:要持久化保存的对象。
- file:可以是一个以读/写模式打开的文件对象、一个 io.BytesIO 对象,或者其他自定义的满足条件的对象。对于函数 dump(),file 参数对象必须有一个 write()方法,该方法接收一个字节串作为参数。对于函数 load(),file 参数对象必须有一个 read()方法和 readline()方法,用于读取一定数量的字符或一行字符,read()方法和 readline()方法都返回读取的字节流。
- bytes_object:表示一个字节对象。
- protocol:这是一个可选的参数,默认为 0,如果设置为 1 或 True,则以高压缩的二进制格式保存持久化后的对象,否则以 ASCII 格式保存。
- fix_imports:用于处理 Python3 和 Python2 的名字兼容性问题,可暂不考虑。
- encoding:默认是“ASCII”,也可以是“‘bytes”(字节)。
pickle模块还提供两个专门的类,Pickler和Unpickler。这两个类分别有两个方法dump()和load()用于执行和上述函数类似的序列化(pickling)和反序列化(unpickling)操作。