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中optionParser模块的使用方法实例教程
Aug 29 Python
初步理解Python进程的信号通讯
Apr 09 Python
Python3.x中自定义比较函数
Apr 24 Python
python采集百度百科的方法
Jun 05 Python
python生成式的send()方法(详解)
May 08 Python
Python numpy 常用函数总结
Dec 07 Python
Django中的forms组件实例详解
Nov 08 Python
python 构造三维全零数组的方法
Nov 12 Python
python global关键字的用法详解
Sep 05 Python
python查看数据类型的方法
Oct 12 Python
python机器学习实现决策树
Nov 11 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python基于右递归解决八皇后问题的方法
2015/05/25 Python
python生成IP段的方法
2015/07/07 Python
python实现文本界面网络聊天室
2018/12/12 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
详解python polyscope库的安装和例程
2020/11/13 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
马来西亚网上购物:Youbeli
2018/03/30 全球购物
说谎欺骗人检讨书300字
2014/11/18 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
仰望星空观后感
2015/06/10 职场文书