课程主题
- 讲师:小甲鱼
- 内容:Python
pickle模块——复杂数据类型的持久化存储
- 核心痛点:普通文件读写仅支持字符串,无法直接保存列表、字典等复杂对象
pickle模块核心概念
- 模块定位:Python标准模块,实现任意对象与二进制流的相互转换
- 核心术语
- pickling:对象→二进制流(序列化、腌制)
- unpickling:二进制流→对象(反序列化、解封)
- 模块优势:可直接保存列表、字典、集合、类实例等复杂数据,无需手动转换为字符串
pickle模块核心操作:保存(pickling)
1. 操作步骤
- 导入模块:
import pickle
- 定义需保存的复杂对象(如列表、字典)
- 示例:
my_list = [1, 2, 3, 3.14, "小甲鱼", ["another list"]]
- 以二进制写入模式打开文件:
pick_file = open("my_list.pkl", "wb")
- 后缀建议:
.pkl或.pickle,仅作标识,不影响格式
- 写入对象:
pickle.dump(对象, 文件对象)
- 示例:
pickle.dump(my_list, pick_file)
- 关闭文件:
pick_file.close() → 必须关闭,避免数据丢失
2. 关键注意事项
- 打开模式必须带
b(二进制),否则报错
- 保存后的文件是二进制格式,文本编辑器打开会显示乱码
pickle模块核心操作:读取(unpickling)
1. 操作步骤
- 导入模块:
import pickle
- 以二进制读取模式打开文件:
pick_file = open("my_list.pkl", "rb")
- 读取对象:
新对象 = pickle.load(文件对象)
- 示例:
my_list2 = pickle.load(pick_file)
- 关闭文件:
pick_file.close()
2. 效果
- 读取后的
my_list2与原my_list内容完全一致,保留原数据类型
pickle模块的实际应用场景
核心场景:分离大型静态数据,简化代码
- 问题案例:天气查询脚本中,
city字典占代码99%体积,导致脚本臃肿(70KB)
- 解决方案
- 单独编写脚本,将
city字典腌制保存为city_data.pkl
import pickle
city = {"北京":101010100, ...}
f = open("city_data.pkl", "wb")
pickle.dump(city, f)
f.close()