【python 内置模块】pickle

2024-01-20 00:00:00

目录:

pickle 模块介绍

pickle 模块用于对象序列化(pickling)与反序列化(unpickling),序列化是指将Python对象转换为字节流(二进制数据)的过程,便于存储到文件或通过网络传输;反序列化则是将字节流恢复为原始Python对象的过程。

主要应用场景如下:

  1. 机器学习模型的保存与加载:训练好的模型(如 scikit-learn、TensorFlow/PyTorch 模型)通常是复杂的 Python 对象,pickle 可以完整保存其结构和参数,便于后续部署和预测;
  2. 缓存复杂计算结果:将耗时计算的结果(如大型 DataFrame、复杂对象)序列化到磁盘,避免重复计算,提升程序效率;
  3. 程序状态持久化:保存游戏存档、应用程序配置或任务队列状态,实现程序中断后能从保存点恢复;
  4. Python 进程间通信 (IPC):在 multiprocessing 等模块中,用于在同一台机器的不同 Python 进程间传递复杂对象;

dump()/load(): 文件序列化/反序列化对象

pickle.dump(obj, file, protocol=None): 将对象 obj 序列化并直接写入已打开的二进制文件对象 file。文件必须以’wb’(二进制写入)模式打开。

pickle.load(file): 从已打开的二进制文件对象 file 中读取字节流,并将其反序列化为 Python 对象。文件必须以 ‘rb’(二进制读取)模式打开。

import pickle

# 准备数据
data = {
    'name': 'Alice',
    'age': 30,
    'hobbies': ['reading', 'coding'],
    'is_student': False
}

# 使用 dump 和 load(文件操作)
with open('data.pkl', 'wb') as f:  # 必须使用二进制写入模式
    pickle.dump(data, f)  # 序列化并保存到文件
print("对象已保存至 data.pkl")

with open('data.pkl', 'rb') as f:  # 必须使用二进制读取模式
    loaded_data = pickle.load(f)  # 从文件加载并恢复对象
print(f"从文件恢复的数据: {loaded_data}")

dumps()/loads(): 内存序列化/反序列化对象

pickle.dumps(obj, protocol=None): 将对象 obj 序列化为字节流(bytes类型)并返回,不涉及文件操作。

pickle.loads(bytes_obj): 将字节流 bytes_obj 直接反序列化为 Python 对象。

import pickle

# 准备数据
data = {
    'name': 'Alice',
    'age': 30,
    'hobbies': ['reading', 'coding'],
    'is_student': False
}

# 使用 dumps 和 loads(内存操作)
serialized_bytes = pickle.dumps(data)  # 序列化为字节流
print(f"序列化字节流(前50字节): {serialized_bytes[:50]}...")
deserialized_data = pickle.loads(serialized_bytes)  # 从字节流恢复
print(f"从字节流恢复的数据: {deserialized_data}")

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: