从零学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 相关文章推荐
动态创建类实例代码
Oct 07 Python
python解析xml文件操作实例
Oct 05 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
在Python中使用gRPC的方法示例
Aug 08 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
Dec 12 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
python解包用法详解
Feb 17 Python
Python函数式编程中itertools模块详解
Sep 15 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 adodb操作mysql数据库
2009/03/19 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
JS实现放烟花效果
2020/03/10 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
python使用递归解决全排列数字示例
2014/02/11 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
五一手机促销方案
2014/03/08 职场文书
中文专业自荐书
2014/06/29 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书