Python Pickle模块数据持久化:保存、读取与序列化详解

温以宁
温以宁
发布时间:2026-10-13| 5人浏览过
原创

本文详解Python中pickle模块的数据保存与读取机制。重点区分Python 2与3的二进制处理差异,强调使用'wb'/'rb'模式打开文件。深入解析dump/load与dumps/loads函数的区别,并通过示例说明多次dump与load的一一对应关系及数据耗尽错误的处理方法,帮助开发者掌握高效的数据序列化技巧。

Pickle模块基础与版本差异

pickle是Python标准库中用于文件压缩、保存及提取数据的模块,支持将字典、列表等常见数据结构进行持久化存储。

需注意Python版本差异:Python 2以ASCII形式保存数据,而Python 3采用二进制数据压缩方式保存,因此在读写文件时必须严格遵循二进制模式。

基于上述差异,在使用pickle保存或读取数据时,打开文件必须明确指定'wb'(写入二进制)或'rb'(读取二进制)模式,以避免编码错误。

文件保存示例


import pickle
a = 'owoof'
with open('111.pkl', 'wb') as file:
    pickle.dump(a, file)

内存序列化:dumps与loads

Pickle模块还提供了dumps()和loads()函数,它们直接在内存中实现二进制字节与pickle序列化对象之间的转换,无需像dump那样操作文件句柄。

具体而言,dumps()函数将可读对象转换为二进制字节串并返回该字节串;loads()函数则接收二进制字节串,将其反序列化为原始可读对象并返回。

使用dump()和load()时,需特别注意文件操作逻辑:每次通过with open打开文件并调用dump(),都会向文件中追加写入数据。再次使用with open打开同一文件时,能够成功调用load()的次数等于之前dump()的调用次数,且每次dump()写入的数据块与一次load()读取的数据严格对应。

文件读写注意事项与数据对应关系


with open('poins_normal.pkl', 'rb') as file:with open('poins_normal.pkl', 'rb') as file:
  class_1 = pickle.load(file)
  # print(np.shape(class_1))
  class_2 = pickle.load(file)
  labels = pickle.load(file)
  class_1 = pickle.load(file)
  # print(np.shape(class_1))
  class_2 = pickle.load(file)
  labels = pickle.load(file)

例如,若事先对文件执行了三次dump()操作,则后续最多只能连续调用三次load(),且每次load()读取的数据与前一次dump()写入的数据一一对应。若尝试进行第四次load()调用,编译器将抛出“data ran out”(数据耗尽)异常。

总结

以上即为Python Pickle模块数据保存与读取的核心要点。希望本文内容能为您的编程工作提供有价值的参考。如需了解更多技术细节,请参阅本站相关链接。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。