Python Pickle库详解:序列化与反序列化实战
本文深入解析Python标准库Pickle的序列化机制,对比其与JSON的差异,详细阐述dumps、loads、dump、load四个核心函数的用法及参数配置,包括协议版本选择与文件读写模式,帮助开发者高效实现Python对象的存储与恢复。
简介
在Python生态中,Pickle提供了一种序列化机制,支持任意Python对象与文本或二进制数据之间的相互转换。通过这一机制,开发者可以方便地实现Python对象的持久化存储以及从存储中恢复对象状态。
Pickle与JSON对比
Pickle协议与JSON(JavaScript Object Notation)存在本质区别:JSON属于文本序列化格式,输出Unicode文本(通常编码为UTF-8),而Pickle生成的是二进制序列化数据;JSON具备人类可读性,Pickle则不可读;JSON在Python生态系统外具有广泛的互操作性,而Pickle仅适用于Python环境;默认情况下,JSON仅支持Python内置类型的子集且无法处理自定义类,而Pickle能够表示大量Python类型(多数通过Python内省机制自动处理,复杂场景可通过实现特定对象API解决)。
Pickle模块的应用非常简单,主要包含四个核心方法。
- dumps():将Python对象序列化为二进制数据,并以字节串形式返回。
- loads():接收给定的二进制数据,并将其反序列化为对应的Python对象。
- dump():将Python对象序列化为二进制数据,并直接写入指定文件。
- load():读取指定的序列化数据文件,并返回反序列化后的对象。
其中,dumps和loads主要用于实现基于内存的Python对象与二进制数据之间的相互转换;而dump和load则用于实现基于文件的Python对象与二进制数据之间的相互转换。
函数详解
dumps
dumps(obj, protocol=None)
- obj:待转换的Python对象。
- protocol:指定Pickle的转码协议,可选值为0、1、2、3、4。其中0、1、2对应Python早期版本,3和4对应Python 3.x及更高版本。若未指定,默认值为3。
import pickle
dic = {"name": "lihua", "age": 30}
pe = pickle.dumps(dic) # 将任意数据类型类型转换成二进制文件
print(pe)loads
loads(data)
data参数表示待转换的二进制对象数据。
import pickle
dic = {"name": "lihua", "age": 30}
pe = pickle.dumps(dic) # 将任意数据类型转换成二进制文件
dic1 = pickle.loads(pe) # 将二进制文件恢复成原来的数据类型
print(dic1)dump
dump (obj, file,protocol=None)
- obj:待转换的Python对象。
- file:指定写入的二进制文件路径,文件必须以“wb”(写二进制)模式打开。
- protocol:指定Pickle的转码协议,可选值为0、1、2、3、4。其中0、1、2对应Python早期版本,3和4对应Python 3.x及更高版本。若未指定,默认值为3。
import pickle
dic = {"name": "lihua", "age": 30}
with open("pickle.pickle", "wb") as f:
pickle.dump(dic, f) # 将转换后的二进制文件存储在pickle.pickle文件里面
load
此函数与dump()对应,用于将二进制对象文件反序列化为Python对象。
load(file)
file参数表示待读取的二进制对象文件,文件必须以“rb”(读二进制)模式打开。
import pickle
dic = {"name": "lihua", "age": 30}
with open("pickle.pickle", "rb") as f:
dic1 = pickle.load(f) # 将存储的文件内容导出为python对象
print(dic1)至此,关于Python中Pickle库的介绍已完成,更多相关内容可参考本站过往文章或继续浏览后续内容,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









