Python3 pickle模块序列化与反序列化详解
本文详细介绍Python3中pickle模块的核心用法,涵盖dump、load、dumps和loads四个关键函数的区别与应用场景。通过具体代码示例,演示如何将Python对象序列化为二进制格式并保存至文件或内存,以及如何从文件恢复原始对象,适用于需要持久化存储或网络传输Python数据结构的开发场景。
pickle模块概述
在Python3中,pickle模块(对应Python2中的cPickle模块)提供了类似Java的序列化和反序列化功能,用于处理对象的状态保存与恢复。
其基本使用方式如下所示:
import pickle
pickle.dump(obj,f)
pickle.dumps(obj,f)
pickle.load(f)
pickle.loads(f)
利用pickle模块,开发者可以直接将Python对象保存至文件,无需手动将其转换为字符串或处理底层二进制文件写入细节。该模块会生成一种Python专用的二进制格式,开发者只需提供合法的文件句柄,即可自动完成对象的读写操作,极大简化了文件处理流程。
核心函数dump与load
pickle模块主要包含两个核心函数:dump()和load()。
dump()函数接收文件句柄和数据对象作为参数,将数据对象以特定格式保存至指定文件。当使用load()函数从文件中读取已保存的对象时,pickle模块会自动识别格式并将其还原为原始的Python对象结构。
内存序列化dumps与loads
dumps()函数执行与dump() 函数相同的序列化逻辑。不同之处在于,dumps()不接受流对象,也不将数据保存至磁盘文件,而是直接返回序列化后的二进制数据。
loads()函数执行与load()函数相同的反序列化操作。它不接受流对象,也不从文件读取数据,而是接收包含序列化数据的str或bytes对象,直接返回还原后的Python对象。
代码示例
具体使用示例如下:
# -*- coding:utf-8 -*-
import pickle
obj = 123, "abcdef", ["ac", 123], {"key": "value", "key1": "value1"}
print(obj)
# 序列化到文件
with open(r"F:\pycodes\ML\a.txt", "wb") as f:
pickle.dump(obj, f)
with open(r"F:\\pycodes\\ML\\a.txt", "rb") as f:
print(pickle.load(f))# 输出:(123, 'abcdef', ['ac', 123], {'key': 'value', 'key1': 'value1'})
# 序列化到内存(字符串格式保存),然后对象可以以任何方式处理如通过网络传输
obj1 = pickle.dumps(obj)
print(type(obj1))# 输出<class 'bytes'>
print(obj1)# 输出:python专用的存储格式 b'\x80\x03(K{X\x06\x00\x00\x00abcdefq\x00]q\x01(X\x02\x00\x00\x00acq\x02K{e}q\x03(X\x03\x00\x00\x00keyq\x04X\x05\x00\x00\x00valueq\x05X\x04\x00\x00\x00key1q\x06X\x06\x00\x00\x00value1q\x07utq\x08.'
obj2 = pickle.loads(obj1)
print(type(obj2))# 输出:<class 'tuple'>
print(obj2) # 输出:(123, 'abcdef', ['ac', 123], {'key': 'value', 'key1': 'value1'})
总结
以上介绍了Python3 pickle模块的核心用法,希望能为读者提供帮助。如有任何疑问,欢迎留言交流,小编将及时回复。感谢大家对本站的支持! 若本文对您有所帮助,欢迎转载,请注明出处,谢谢!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













