从零学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检测远程udp端口是否打开的方法
Mar 14 Python
Python实现程序的单一实例用法分析
Jun 03 Python
Python操作Access数据库基本步骤分析
Sep 19 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
解决python中无法自动补全代码的问题
Dec 04 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
Python实现线性插值和三次样条插值的示例代码
Nov 13 Python
Python+Redis实现布隆过滤器
Dec 08 Python
Python连接字符串过程详解
Jan 06 Python
python Pexpect模块的使用
Dec 25 Python
一些让Python代码简洁的实用技巧总结
Aug 23 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 地址栏信息的获取代码
2009/01/07 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
再探JavaScript作用域
2014/09/24 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
一道Delphi上机题
2012/06/04 面试题
品质主管岗位职责
2014/03/16 职场文书
村道德模范事迹材料
2014/08/28 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
承诺函范文
2015/01/21 职场文书
二胎满月酒致辞
2015/07/29 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
2019年最新借条范本!
2019/07/08 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
python not运算符的实例用法
2021/06/30 Python