Python 什么是Pickling和Unpickling
为了将Python对象结构序列化和反序列化,我们在Python中使用了Pickle模块。Pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。
Pickling 是将Python对象层次结构转换为字节流的过程。要序列化对象层次结构,只需调用dumps()函数。
Unpickling 是相反的操作。从二进制文件或类似字节的对象中将字节流转换回对象层次结构。要反序列化数据流,调用loads()函数。
序列化和反序列化也可以被称为序列化。
哪些内容可以进行序列化和反序列化
在Python中,以下类型可以进行序列化:
- None、True和False。
- 整数、浮点数、复数。
- 字符串、字节、字节数组。
- 只包含可进行序列化的对象的元组、列表、集合和字典。
- 函数,内置的和用户定义的。
Pickle模块常量
Pickle模块提供了以下常量:
- pickle.HIGHEST_PROTOCOL - 可用的最高协议版本。整数值。
-
pickle.DEFAULT_PROTOCOL - 序列化时使用的默认协议版本。整数值。当前默认协议是4。
Pickle模块函数
Pickle模块提供了以下函数:
- pickle.dump() - 将对象的序列化表示写入打开的文件对象file中。
-
pickle.dumps() - 返回对象的序列化表示作为字节对象,而不是将其写入文件。
-
pickle.load() - 从打开的文件对象file中读取对象的序列化表示。
-
pickle.loads() - 返回对象的序列化表示数据的重构对象层次结构。
示例
首先,导入pickle模块-
import pickle
我们已经创建了以下输入以进行pickle处理。
my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}
demo.pickle文件已创建。这个相同的.pickle文件会与上面的列表一起被序列化。
with open("demo.pickle","wb") as file_handle:
pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL)
现在,取消pickle上面的pickle文件并获取输入值。
with open("demo.pickle","rb") as file_handle:
res = pickle.load(file_handle)
print(res_data)
现在让我们看一个完整的示例
import pickle
# Input Data
my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}
# Pickle the input
with open("demo.pickle","wb") as file_handle:
pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL)
# Unpickle the above pickled file
with open("demo.pickle","rb") as file_handle:
res = pickle.load(file_handle)
print(my_data) # display the output
输出
{'Benz', 'Toyota', 'Audi', 'BMW'}