Python pickle模块常用方法代码实例


Posted in Python onOctober 10, 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 28 Python
python通过索引遍历列表的方法
May 04 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python openCV获取人脸部分并存储功能
Aug 28 Python
python logging.info在终端没输出的解决
May 12 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
python实现图片,视频人脸识别(opencv版)
Nov 18 Python
python中time.ctime()实例用法
Feb 03 Python
如何用Python和JS实现的Web SSH工具
Feb 23 Python
Python3.9新特性详解
Oct 10 #Python
Python random模块的使用示例
Oct 10 #Python
python 装饰器的使用示例
Oct 10 #Python
python使用bs4爬取boss直聘静态页面
Oct 10 #Python
通过案例解析python鸭子类型相关原理
Oct 10 #Python
通过实例解析python subprocess模块原理及用法
Oct 10 #Python
如何使用python自带IDLE的几种方法
Oct 10 #Python
You might like
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
php中函数前加&符号的作用分解
2014/07/08 PHP
浅谈php冒泡排序
2014/12/30 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
JavaScript 乱码问题
2009/08/06 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python机器学习之神经网络实现
2018/10/13 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
Python连接mysql方法及常用参数
2020/09/01 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
html5读取本地文件示例代码
2014/04/22 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
韩国现代百货官网:Hmall
2018/03/21 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
三年级音乐教学反思
2014/01/28 职场文书
老师对学生的评语
2014/04/18 职场文书
文明寝室标语
2014/06/13 职场文书
先进工作者事迹材料
2014/12/23 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
MySQL 如何限制一张表的记录数
2021/09/14 MySQL