什么是 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'}