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深入学习之装饰器
Aug 31 Python
判断网页编码的方法python版
Aug 12 Python
python生成式的send()方法(详解)
May 08 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
Python绘制KS曲线的实现方法
Aug 13 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
python 中不同包 类 方法 之间的调用详解
Mar 09 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 Python
Python类型转换的魔术方法详解
Dec 23 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 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 daodb插入、更新与删除数据
2009/03/19 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
python中reload(module)的用法示例详解
2017/09/15 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
SQL面试题
2013/12/09 面试题
编程实现去掉XML的重复结点
2014/05/28 面试题
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
教师竞聘上岗演讲稿
2014/09/03 职场文书
节水倡议书
2015/01/19 职场文书
工程部岗位职责
2015/02/10 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
2016年校长新年寄语
2015/08/17 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
Python超简单容易上手的画图工具库推荐
2021/05/10 Python