从零学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 相关文章推荐
详解Django通用视图中的函数包装
Jul 21 Python
详解python 发送邮件实例代码
Dec 22 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
python用requests实现http请求代码实例
Oct 31 Python
手动安装python3.6的操作过程详解
Jan 13 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
python 6行代码制作月历生成器
Sep 18 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 Python
python blinker 信号库
May 04 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
农民和部队如何穿矿
2020/03/04 星际争霸
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
JavaScript工具库之Lodash详解
2019/06/15 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
Python中使用动态变量名的方法
2014/05/06 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
django session完成状态保持的方法
2018/11/27 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
九州传奇上机题
2014/07/10 面试题
工厂仓库管理员岗位职责
2015/04/09 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
Mysql Show Profile
2021/04/05 MySQL
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记