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 相关文章推荐
Python3基础之条件与循环控制实例解析
Aug 13 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
TensorFlow如何实现反向传播
Feb 06 Python
python文件操作之批量修改文件后缀名的方法
Aug 10 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
基于python实现上传文件到OSS代码实例
May 09 Python
Python变量及数据类型用法原理汇总
Aug 06 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 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+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
PHP反射API示例分享
2016/10/08 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
Node.js编码规范
2014/07/14 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
基于require.js的使用(实例讲解)
2017/09/07 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
Python过滤列表用法实例分析
2016/04/29 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
python梯度下降算法的实现
2020/02/24 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
我们的节日端午节活动方案
2014/03/02 职场文书
银行办公室岗位职责
2014/03/10 职场文书
群众路线党课主持词
2014/04/01 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
学术会议通知
2015/04/15 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
外出考察学习心得体会
2016/01/18 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python