Python 中的 Pickle 和 Unpickle 是什么?
为了序列化和反序列化 Python 对象结构,我们在 Python 中有 Pickle 模块。pickle 模块实现了用于序列化和反序列化 Python 对象结构的二进制协议。
Pickling 是将 Python 对象层次结构转换为字节流的过程。要序列化对象层次结构,只需调用 dumps() 函数。
Unpickling 是逆向操作。将来自二进制文件或类似字节的对象的字节流转换回对象层次结构。要反序列化数据流,请调用 loads() 函数。
Pickling 和 unpickling 也被称为序列化。
什么可以被 pickle 和 unpickle?
在 Python 中,以下类型可以被 pickle:
- None、True 和 False。
- 整数、浮点数、复数。
- 字符串、字节、字节数组。
- 元组、列表、集合和字典,其中仅包含可 pickle 的对象。
- 函数,内置和用户定义的。
Pickle 模块常量
以下是 pickle 模块提供的常量:
pickle.HIGHEST_PROTOCOL - 可用的最高协议版本。整数值。
pickle.DEFAULT_PROTOCOL - 用于 pickling 的默认协议版本。整数值。当前默认协议为 4
Pickle 模块函数
以下是 pickle 模块提供的函数:
pickle.dump() - 将对象的 pickle 表示写入打开的文件对象 file 中。
pickle.dumps() - 将对象的 pickle 表示作为字节对象返回,而不是将其写入文件。
pickle.load() - 从打开的文件对象 file 中读取对象的 pickle 表示。
pickle.loads() - 返回对象的 pickle 表示数据重建的对象层次结构
示例
首先,导入 pickle 模块:
import pickle
我们创建了以下要 pickling 的输入。
my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}
创建了 demo.pickle 文件。此相同的 .pickle 文件使用上述列表进行 pickling
with open("demo.pickle","wb") as file_handle: pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL)
现在,解开上述 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'}
广告