从零学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 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
python购物车程序简单代码
Apr 18 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
Python logging模块用法示例
Aug 28 Python
python取余运算符知识点详解
Jun 27 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
python global和nonlocal用法解析
Feb 03 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 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 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
一些常用的Javascript函数
2006/12/22 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
详解小程序缓存插件(mrc)
2018/08/17 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
python文件操作之目录遍历实例分析
2015/05/20 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
pow在python中的含义及用法
2019/07/11 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
Hibernate持久层技术
2013/12/16 面试题
调解员先进事迹材料
2014/02/07 职场文书
门前三包责任书
2014/04/15 职场文书
高考升学宴答谢词
2015/01/20 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
工作简报范文
2015/07/21 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
Python 语言实现六大查找算法
2021/06/30 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android