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中List的sort方法指南
Sep 01 Python
Python求解平方根的方法
Mar 11 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
Python格式化输出%s和%d
May 07 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
python带参数打包exe及调用方式
Dec 21 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
Django restful framework生成API文档过程详解
Nov 12 Python
Python安装Bs4的多种方法
Nov 28 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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数组是否为索引数组的实现方法
2013/06/13 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
Python爬取附近餐馆信息代码示例
2017/12/09 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
python扫描线填充算法详解
2020/02/19 Python
python logging 日志的级别调整方式
2020/02/21 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
MYSQL支持事务吗
2013/08/09 面试题
电子商务专业个人的自我评价
2013/12/19 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
化妆品店促销方案
2014/02/24 职场文书
销售主管竞聘书
2014/03/31 职场文书
社区禁毒工作方案
2014/06/02 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
工作简报怎么写
2015/07/21 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
服务行业标语口号
2015/12/26 职场文书