从零学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的迭代器和生成器使用实例
Jan 14 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
CentOS安装pillow报错的解决方法
Jan 27 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
jupyter notebook oepncv 显示一张图像的实现
Apr 24 Python
PyQt5实现登录页面
May 30 Python
python 实现有道翻译功能
Feb 26 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 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 smarty函数扩展
2010/03/15 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
python定时器(Timer)用法简单实例
2015/06/04 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
DBA的职责都有哪些
2012/05/16 面试题
秸秆管理实施方案
2014/03/15 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
信访工作经验交流材料
2014/05/23 职场文书
选秀节目策划方案
2014/06/06 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
2015国庆节感想
2015/08/04 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
原生JS实现飞机大战小游戏
2021/06/09 Javascript
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
Python加密技术之RSA加密解密的实现
2022/04/08 Python