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'}

更新于: 2022-09-15

7K+ 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告