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设计模式之代理模式简单示例
Jan 09 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
python实现聊天小程序
Mar 13 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
基于python-opencv3的图像显示和保存操作
Jun 27 Python
python的range和linspace使用详解
Nov 27 Python
Python通过Pillow实现图片对比
Apr 29 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
如何用python识别滑块验证码中的缺口
Apr 01 Python
python非标准时间的转换
Jul 25 Python
python语言中pandas字符串分割str.split()函数
Aug 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输出1000以内质数(素数)示例
2014/02/16 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
使用Python生成url短链接的方法
2015/05/04 Python
Python基本语法经典教程
2016/03/11 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
numpy返回array中元素的index方法
2018/06/27 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
python retrying模块的使用方法详解
2019/09/25 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
餐厅考勤管理制度
2014/01/28 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
社区科普工作方案
2014/06/03 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
个人股份合作协议书
2014/10/24 职场文书
五一晚会主持词
2015/07/01 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
使用refresh_token实现无感刷新页面
2022/04/26 Javascript