Python pickle模块用法实例分析

  • Post category:Python

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 }