目录
4. pickle.dumps()、pickle.loads()
1. pickle函数模块基础
官方说明:
模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化。 "pickling" 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 "unpickling" 是相反的操作,会将(来自一个 binary file 或者 bytes-like object 的)字节流转化回一个对象层次结构。 pickling(和 unpickling)也被称为“序列化”, “编组” 1 或者 “平面化”。而为了避免混乱,此处采用术语 “封存 (pickling)” 和 “解封 (unpickling)”。
常用的文件操作方法,是针对字符串的,如要对数值进行存储读取,可以使用 int()、float() 对象;但列表、字典、类等更为复杂的数据类型的处理则会非常复杂。此时,如要对其他Python对象进行存储和读取,应用 pickle 模块执行是一个好的选择。
需要注意的是 pickle 所使用的数据格式仅可用于 Python,这意味着非 Python 程序可能无法重新读取 pickle 封存的 Python 对象。此时根据具体需要可以考虑使用 json、csv 模块等,json 模块参见:《文件6:json模块》
2. pickle.dump()
将对象 obj 封存以后的对象写入已打开的 file object file。
函数结构如下:
pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)
各参数说明如下:
- 参数 file 必须有一个 write() 方法,该 write() 方法要能接收字节作为其唯一参数。因此,它可以是一个打开的磁盘文件(用于写入二进制内容),也可以是一个 io.BytesIO 实例,也可以是满足这一接口的其他任何自定义对象。
- 如果 fix_imports 为 True 且 protocol 小于 3,pickle 将尝试将 Python 3 中的新名称映射到