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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
在Python中操作列表之List.append()方法的使用
May 20 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
python实现三维拟合的方法
Dec 29 Python
Python 列表去重去除空字符的例子
Jul 20 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
python输出数学符号实例
May 11 Python
Python字符串格式化常用手段及注意事项
Jun 17 Python
Python filter过滤器原理及实例应用
Aug 18 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 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获取某个目录大小的代码
2008/09/10 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
JS常用函数使用指南
2014/11/23 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
javascript中的面向对象
2017/03/30 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
python strip()函数 介绍
2013/05/24 Python
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
python编写俄罗斯方块
2020/03/13 Python
django实现模型字段动态choice的操作
2020/04/01 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
10条PHP编程习惯
2014/05/26 面试题
招标授权委托书样本
2014/09/23 职场文书
工作保证书
2015/01/17 职场文书
公司欠款证明
2015/06/24 职场文书
党员公开承诺书2016
2016/03/24 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
Golang gRPC HTTP协议转换示例
2022/06/16 Golang