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

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

本文详解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 相关产品和应用

全部下载

专题列表