什么是 Python 中的 Pickling 和 Unpickling?

什么是 Python 中的 Pickling 和 Unpickling?

为了序列化和反序列化 Python 对象,我们使用 Python 中的 Pickle 模块。pickle 模块实现了二进制协议,用于序列化和反序列化 Python 对象结构。

Pickling 是将 Python 对象层次结构转换为字节流的过程。要序列化对象层次结构,只需调用 dumps() 函数。

Unpickling 是上述过程的反操作。从二进制文件或类字节对象获取的字节流将被转换回对象层次结构。要反序列化数据流,您需要调用 loads() 函数。

Pickling 和 unpickling 也称为序列化。

更多Python相关文章,请阅读:Python 教程

可以 Pickling 和 Unpickling 哪些对象?

在 Python 中,可以 pickle 的类型有以下几种:

  • None、True 和 False。
  • 整数、浮点数、复数。
  • 字符串、字节、字节数组。
  • 仅包含可 pickle 对象的元组、列表、集合和字典。
  • 函数,包括内置函数和用户自定义函数。

Pickle 模块常量

pickle 模块提供了以下常量:

  • pickle.HIGHEST_PROTOCOL —— 最高协议版本。整数值。

  • pickle.DEFAULT_PROTOCOL —— 用于 pickle 的默认协议版本。整数值。目前默认的协议版本为 4。

Pickle 模块函数

pickle 模块提供了以下函数:

  • pickle.dump() —— 将对象的序列化表示写入打开的文件对象文件。

  • pickle.dumps() —— 以 bytes 对象的形式返回对象的序列化表示,而不是将其写入文件。

  • pickle.load() —— 从打开的文件对象文件读取对象的序列化表示。

  • pickle.loads() —— 返回 pickle 表示的数据的重建对象层次结构。

例如

首先,我们导入 pickle 模块 –

import pickle

我们创建了以下待 pickle 的输入:

my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}

创建 demo.pickle 文件。这个同样的 .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

# 输入数据
my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}

# 将输入数据进行序列化
with open("demo.pickle","wb") as file_handle:
   pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL)

# 读取上述序列化的数据
with open("demo.pickle","rb") as file_handle:
   res = pickle.load(file_handle)
   print(my_data) # 显示输出结果

输出

{'Benz', 'Toyota', 'Audi', 'BMW'}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程