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函数递归和生成器
Jun 06 Python
详解Python中的array数组模块相关使用
Jul 05 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
Python中偏函数用法示例
Jun 07 Python
Django 表单模型选择框如何使用分组
May 16 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
Python如何执行系统命令
Sep 23 Python
教你使用pyinstaller打包Python教程
May 27 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基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
JS中的回调函数实例浅析
2018/03/21 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
Python数据类型详解(一)字符串
2016/05/08 Python
python处理按钮消息的实例详解
2017/07/11 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python利用tkinter实现屏保
2019/07/30 Python
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
大学生创业计划书的范文
2014/01/07 职场文书
剪彩仪式主持词
2014/03/19 职场文书
新文化运动的口号
2014/06/21 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
办公经费申请报告
2015/05/15 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
Golang 并发编程 SingleFlight模式
2022/04/26 Golang
详解PyTorch模型保存与加载
2022/04/28 Python