从零学python系列之浅谈pickle模块封装和拆封数据对象的方法


Posted in Python onMay 23, 2014

封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节流转化为Python数据对象,不要从不收信任的数据源中拆封数据。可以封装和拆封几乎任何Python数据对象,主要包括:

    None , True,False
    整数,浮点数,复数
    字符串,字节,ByteArray对象
    元组,列表,集合,包含可封装对象的字典
    在一个模块的顶层定义的函数
    在一个模块的顶层定义的内置函数
    那是在一个模块的顶层定义的类
    __dict__或调用__getstate__()的结果是可封装的类的实例

 pickle模块中常用的方法有:

    1. pickle.dump(obj, file, protocol=None,)

    必填参数obj表示将要封装的对象

    必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb”

    可选参数protocol表示告知pickler使用的协议,支持的协议有0,1,2,3,默认的协议是添加在Python 3中的协议3,     其他的协议详情见参考文档

    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

 pickle应用实例:

import pickle  
with open("my_profile.txt", "wb") as myprofile:  
    pickle.dump({"name":"AlwaysJane", "age":"20+", "sex":"female"}, myprofile)
with open("my_profile.txt", "rb") as get_myprofile:
    print (pickle.load(get_myprofile))
import pickle 
class Profile:
    name = "AlwaysJane"
pickledclass = pickle.dumps(Profile)
print (pickledclass)
print (pickle.loads(pickledclass))

理解不是很透彻,希望大神们指正错误。。。

附上参考文档

Python 相关文章推荐
Python实现抓取城市的PM2.5浓度和排名
Mar 19 Python
python获得一个月有多少天的方法
Jun 04 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
Python实现的文轩网爬虫完整示例
May 16 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
python 实现让字典的value 成为列表
Dec 16 Python
python学生信息管理系统实现代码
Dec 17 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
Django 解决model 反向引用中的related_name问题
May 19 Python
python+requests实现接口测试的完整步骤
Oct 27 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
从零学python系列之新版本导入httplib模块报ImportError解决方案
May 23 #Python
从零学python系列之数据处理编程实例(二)
May 22 #Python
从零学python系列之数据处理编程实例(一)
May 22 #Python
Python学习笔记_数据排序方法
May 22 #Python
从零学Python之hello world
May 21 #Python
Python开发实例分享bt种子爬虫程序和种子解析
May 21 #Python
从零学Python之引用和类属性的初步理解
May 15 #Python
You might like
深入php 正则表达式的学习探讨
2013/06/06 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
linux下编译安装memcached服务
2014/08/03 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
php给数组赋值的实例方法
2019/09/26 PHP
javascript document.execCommand() 常用解析
2009/12/14 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
python实现类之间的方法互相调用
2018/04/29 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
历史系毕业生自荐信
2013/10/28 职场文书
策划创业计划书
2014/02/06 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
杨善洲电影观后感
2015/06/04 职场文书
初中语文教学随笔
2015/08/15 职场文书
导游词幽默开场白
2019/06/26 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
如何理解及使用Python闭包
2021/06/01 Python
python ansible自动化运维工具执行流程
2021/06/24 Python
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL