Python序列化pickle模块使用详解


Posted in Python onMarch 05, 2020

用于序列化的两个模块

  • json:用于字符串和Python数据类型间进行转换

  • pickle: 用于python特有的类型和python的数据类型间进行转换

  • json提供四个功能:dumps,dump,loads,load

  • pickle提供四个功能:dumps,dump,loads,load

pickle可以存储什么类型的数据呢?

所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。

由任何原生类型组成的列表,元组,字典和集合。

函数,类,类的实例

pickle模块中常用的方法有:

1. pickle.dump(obj, file, protocol=None,)

必填参数obj表示将要封装的对象

必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“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): 从字节对象中读取被封装的对象,并返回

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中的__init__和__new__
Mar 12 Python
python中随机函数random用法实例
Apr 30 Python
python实时分析日志的一个小脚本分享
May 07 Python
python 数据的清理行为实例详解
Jul 12 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
python使用zip将list转为json的方法
Dec 31 Python
对python周期性定时器的示例详解
Feb 19 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
Python如何实现线程间通信
Jul 30 Python
python编写五子棋游戏
May 25 Python
Window系统下Python如何安装OpenCV库
Mar 05 #Python
Python bytes string相互转换过程解析
Mar 05 #Python
Python 从attribute到property详解
Mar 05 #Python
Python+OpenCV实现图像的全景拼接
Mar 05 #Python
Python对象的属性访问过程详解
Mar 05 #Python
Python安装OpenCV的示例代码
Mar 05 #Python
opencv python在视屏上截图功能的实现
Mar 05 #Python
You might like
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
php异常处理使用示例
2014/02/25 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
JS实现简单打字测试
2020/06/24 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
常用python编程模板汇总
2016/02/12 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
详解如何设置Python环境变量?
2019/05/13 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
南京某公司笔试题
2013/01/27 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
团支书的期末学习总结自我评价
2013/11/01 职场文书
现场活动策划方案
2014/08/22 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
目标责任书格式范文
2015/05/11 职场文书
2015年体育教师个人工作总结
2015/05/12 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android