Python pickle模块常用方法代码实例
本文详细介绍Python中pickle模块的四大核心方法:dumps、dump、loads和load。内容涵盖pickle支持的数据类型、协议版本差异(0至4)、文件读写模式要求以及PickleError等常见异常处理。通过具体代码示例,帮助开发者掌握Python对象的序列化和反序列化技巧,适用于数据持久化存储场景。
Python序列化模块对比
在Python中,进行数据序列化主要涉及两个模块。
- json模块主要用于字符串与Python标准数据类型之间的相互转换,适用于跨语言或轻量级数据交换场景。
- pickle模块则专门用于Python特有类型与Python数据类型之间的转换,它保留了Python对象的完整结构,适用于Python环境内的持久化存储。
- json模块提供了四个主要功能:dumps(序列化字符串)、dump(写入文件)、loads(反序列化字符串)和load(从文件读取)。
- pickle模块同样提供了对应的四个功能:dumps、dump、loads和load,用于处理Python对象的序列化与反序列化。
pickle支持的数据类型
pickle模块能够存储哪些类型的数据?
- 所有Python支持的原生类型,包括布尔值、整数、浮点数、复数、字符串、字节对象以及None。
- 由上述原生类型组成的复合数据结构,如列表、元组、字典和集合。
- 函数定义、类定义以及类的实例对象。
pickle核心方法详解
pickle模块中常用的方法及其参数说明如下:
1. pickle.dump(obj, file, protocol=None,)
必填参数obj表示将要进行封装(序列化)的对象。
必填参数file表示obj要写入的文件对象,该文件必须以二进制可写模式打开,即模式为“wb”。
可选参数protocol表示告知pickler使用的协议版本,支持的协议有0、1、2、3,默认的协议是添加在Python 3中的协议3。
- Protocol version 0 is the original “human-readable” protocol and is backwards compatible with earlier versions of Python.
- Protocol version 1 is an old binary format which is also compatible with earlier versions of Python.
- Protocol version 2 was introduced in Python 2.3. It provides much more efficient pickling of new-style classes. Refer to PEP 307 for information about improvements brought by protocol 2.
- Protocol version 3 was added in Python 3.0. It has explicit support for bytes objects and cannot be unpickled by Python 2.x. This is the default protocol, and the recommended protocol when compatibility with other Python 3 versions is required.
- Protocol version 4 was added in Python 3.4. It adds support for very large objects, pickling more kinds of objects, and some data format optimizations. Refer to PEP 3154 for information about improvements brought by protocol 4.
2. pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict")
必填参数file必须以二进制可读模式打开,即“rb”,其他参数均为可选参数。
3. pickle.dumps(obj):以字节对象形式返回封装后的对象,无需写入文件,适用于内存中的序列化操作。
4. pickle.loads(bytes_object):从字节对象中读取被封装的对象,并将其还原为Python数据结构后返回。
pickle异常处理
在使用pickle模块时,可能会遇到以下三种异常:
1. PickleError:封装和拆封时出现的异常类,继承自Exception。
2. PicklingError:遇到不可封装的对象时出现的异常,继承自PickleError。
3. UnPicklingError:在拆封(反序列化)对象过程中出现的异常,继承自PickleError。
代码应用示例
应用示例:
# dumps功能
import pickle
data = ['aa', 'bb', 'cc']
# dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
p_str = pickle.dumps(data)
print(p_str) 7 b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.
# loads功能
# loads 将pickle数据转换为python的数据结构
mes = pickle.loads(p_str)
print(mes)
['aa', 'bb', 'cc']
# dump功能
# dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
with open('D:/tmp.pk', 'w') as f:
pickle.dump(data, f)
# load功能
# load 从数据文件中读取数据,并转换为python的数据结构
with open('D:/tmp.pk', 'r') as f:
data = pickle.load(f)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













