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开发中range()函数用法实例分析
Nov 12 Python
python实现决策树分类算法
Dec 21 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
深入浅析Python代码规范性检测
Jul 31 Python
python如何爬取动态网站
Sep 09 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 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
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
Prototype Class对象学习
2009/07/19 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
详解JS函数防抖
2020/06/05 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
Python实现新浪博客备份的方法
2016/04/27 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python编写Windows Service服务程序
2018/01/04 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
pycharm创建一个python包方法图解
2019/04/10 Python
python对常见数据类型的遍历解析
2019/08/27 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
Python实现括号匹配方法详解
2020/02/10 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
爽歪歪广告词
2014/03/20 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
社区好人好事材料
2014/12/26 职场文书
护士长2015年终工作总结
2015/04/24 职场文书