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中lambda与def用法对比实例分析
Apr 30 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
Python实战之制作天气查询软件
May 14 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
Python进度条的制作代码实例
Aug 31 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
linux 下selenium chrome使用详解
Apr 02 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
python/golang实现循环链表的示例代码
Sep 14 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 Python
Python matplotlib绘制雷达图
Apr 13 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
yii上传文件或图片实例
2014/04/01 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
python连接mysql调用存储过程示例
2014/03/05 Python
python将图片文件转换成base64编码的方法
2015/03/14 Python
python的debug实用工具 pdb详解
2019/07/12 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
学习雷锋演讲稿
2014/05/10 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
学校工作推荐信范文
2014/07/11 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
零基础学java之循环语句的使用
2022/04/10 Java/Android
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js