Python 什么是Pickling和Unpickling

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程