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切片原理和方法
Dec 19 Python
python迭代dict的key和value的方法
Jul 06 Python
python中partial()基础用法说明
Dec 30 Python
Python实现带下标索引的遍历操作示例
May 30 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
简单了解python反射机制的一些知识
Jul 13 Python
python如何求数组连续最大和的示例代码
Feb 04 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
Python利用命名空间解析XML文档
Aug 10 Python
教你漂亮打印Pandas DataFrames和Series
May 29 Python
python 单机五子棋对战游戏
Apr 28 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
什么是短波收听SWL
2021/03/01 无线电
PHP入门经历和学习过程分享
2014/04/11 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
PHP7内核之Reference详解
2019/03/14 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python画折线图的程序
2018/07/26 Python
python实现websocket的客户端压力测试
2019/06/25 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
Python实现自动访问网页的例子
2020/02/21 Python
python判断变量是否为列表的方法
2020/09/17 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
法国珠宝店:CLEOR
2017/01/29 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
妇科医生自荐信
2013/11/05 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫