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实现一个简单的能够上传下载的HTTP服务器
May 05 Python
python实现linux下使用xcopy的方法
Jun 28 Python
Python中字典和集合学习小结
Jul 07 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
python 实现登录网页的操作方法
May 11 Python
Python实现快速计算词频功能示例
Jun 25 Python
python 去除txt文本中的空格、数字、特定字母等方法
Jul 24 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
Python使用googletrans报错的解决方法
Sep 25 Python
Django框架封装外部函数示例
May 28 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
Django使用channels + websocket打造在线聊天室
May 20 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中文字符截取防乱码
2008/03/28 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
python中ConfigParse模块的用法
2014/09/29 Python
使用python实现生成用户信息
2017/03/20 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
浅谈Python处理PDF的方法
2017/11/10 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
django admin组件使用方法详解
2019/07/19 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
美国电视购物HSN官网:HSN
2016/09/07 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
Jar包的作用是什么
2014/03/30 面试题
总经理职责
2013/12/22 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
学校交通安全责任书
2014/08/25 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
Redis命令处理过程源码解析
2022/02/12 Redis