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 相关文章推荐
py2exe 编译ico图标的代码
Mar 08 Python
Python中的默认参数详解
Jun 24 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
Python实现微信机器人的方法
Sep 06 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
python如何设置静态变量
Sep 07 Python
python神经网络编程之手写数字识别
May 08 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 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把小数转成整数3种方法
2014/06/30 PHP
PHP实现懒加载的方法
2015/03/07 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
轻松实现php文件上传功能
2017/02/17 PHP
索趣科技的答案
2007/02/07 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
php 修改密码实现代码
2017/05/24 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
python技能之数据导出excel的实例代码
2017/08/11 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
大学生简历的个人自我评价
2013/12/04 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
公共场所禁烟标语
2014/06/25 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
防暑降温通知书
2015/04/27 职场文书
新学期开学寄语2016
2015/12/04 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
nginx中proxy_pass各种用法详解
2021/11/07 Servers
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis