从零学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中的字典详细介绍
Sep 18 Python
python自定义类并使用的方法
May 07 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
python3之模块psutil系统性能信息使用
May 30 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
python删除文件夹下相同文件和无法打开的图片
Jul 16 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
Python测试模块doctest使用解析
Aug 10 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
浅析Python实现DFA算法
Jun 26 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 escape URL编码
2008/12/10 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
PHP对象实例化单例方法
2017/01/19 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
javascript常用的方法分享
2015/07/01 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
python ssh 执行shell命令的示例
2020/09/29 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
长辈证婚人证婚词
2014/01/09 职场文书
聚美优品的广告词
2014/03/14 职场文书
十佳少年事迹材料
2014/12/25 职场文书
三年级学生期末评语
2014/12/26 职场文书
贷款工作证明模板
2015/06/12 职场文书
理想国读书笔记
2015/06/25 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
python垃圾回收机制原理分析
2022/04/13 Python
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL