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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
Django中更新多个对象数据与删除对象的方法
Jul 17 Python
Python使用剪切板的方法
Jun 06 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python turtle 绘制太极图的实例
Dec 18 Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
python实现文法左递归的消除方法
May 22 Python
python em算法的实现
Oct 03 Python
python实现控制台输出颜色
Mar 02 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 max_execution_time执行时间问题
2011/07/17 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
京东国际站:JOYBUY
2017/11/23 全球购物
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
2014高考励志标语
2014/06/05 职场文书
工伤事故证明
2014/10/20 职场文书
旷课检讨书
2015/01/26 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电
Python日志模块logging用法
2022/06/05 Python
httpclient调用远程接口的方法
2022/08/14 Java/Android