PythonPickle模块用法实例分析
简介
Python pickle
模块可以实现序列化和反序列化操作,将 Python 对象转换成字节流,以便于存储或传输到网络。它支持大部分 Python 数据类型并且大小写效率极高,是 Python 标准库中必不可少的一个模块。本文对 pickle
及其用法进行详细的介绍和分析。
安装
pickle
是 Python 标准库中的模块,因此在安装 Python 时就已经自带了。无需额外安装。
序列化
下面是一个简单的序列化操作的例子:
import pickle
# 定义一个 Python 对象
data = {'a': 1, 'b': 2, 'c': 3}
# 序列化操作,将 Python 对象转换成字节流
bytes_data = pickle.dumps(data)
# 打印序列化后的字节流
print(bytes_data)
可以看到,序列化后的字节流是一串二进制数据:
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02X\x01\x00\x00\x00cq\x03K\x03u.'
反序列化
序列化后的字节流需要使用反序列化操作才能还原成 Python 对象,下面是一个反序列化操作的例子:
import pickle
# 定义一个序列化后的字节流
bytes_data = b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02X\x01\x00\x00\x00cq\x03K\x03u.'
# 反序列化操作,将序列化后的字节流还原成 Python 对象
data = pickle.loads(bytes_data)
# 打印还原后的 Python 对象
print(data)
结果是:
{'a': 1, 'b': 2, 'c': 3}
序列化和反序列化到文件
除了将序列化后的字节流存储到内存中,我们还可以将其保存到文件中,下面是一个将 Python 对象序列化后存储到文件再进行反序列化的例子:
import pickle
# 定义一个 Python 对象
data = {'a': 1, 'b': 2, 'c': 3}
# 将 Python 对象序列化到文件中
with open('data.pickle', 'wb') as f:
pickle.dump(data, f)
# 从文件中读取序列化的字节流并反序列化为 Python 对象
with open('data.pickle', 'rb') as f:
bytes_data = f.read()
data = pickle.loads(bytes_data)
# 打印反序列化后的 Python 对象
print(data)
结果与之前的例子相同,都是打印出 Python 字典 { 'a': 1, 'b': 2, 'c': 3 }
。