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编程中运用闭包时所需要注意的一些地方
May 02 Python
深入浅析python继承问题
May 29 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
人机交互程序 python实现人机对话
Nov 14 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
10个Python面试常问的问题(小结)
Nov 20 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
python与js主要区别点总结
Sep 13 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
Python 中random 库的详细使用
Jun 03 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中使用Oracle数据库(3)
2006/10/09 PHP
smarty简单分页的实现方法
2014/10/27 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
JavaScript高级程序设计
2006/12/29 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python 移除字符串尾部的数字方法
2018/07/17 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
采购员的工作职责
2013/12/26 职场文书
婚前协议书怎么写
2014/04/15 职场文书
求职信格式要求
2014/05/23 职场文书
大型公益活动策划方案
2014/08/20 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
施工安全员岗位职责
2015/04/11 职场文书