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实现问号表达式(?)的方法
Nov 27 Python
Python获取网页上图片下载地址的方法
Mar 11 Python
python实现汉诺塔方法汇总
Jul 25 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
python的数学算法函数及公式用法
Nov 18 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 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实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
php实现短信发送代码
2015/07/05 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
理解JavaScript的prototype属性
2012/02/11 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
Vue配置marked链接添加target="_blank"的方法
2019/07/19 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
Python中scatter函数参数及用法详解
2017/11/08 Python
python实现简单神经网络算法
2018/03/10 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
英国复古服装购物网站:Collectif
2019/10/30 全球购物
英语国培研修感言
2014/02/13 职场文书
法制宣传教育方案
2014/05/09 职场文书
2014年仓库工作总结
2014/11/20 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
感谢信的格式
2015/01/21 职场文书
瘦西湖导游词
2015/02/03 职场文书
给下属加薪申请报告
2015/05/15 职场文书
导游词之桂林山水
2019/09/20 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python