Python pickle模块用法实例分析


Posted in Python onMay 27, 2015

本文实例讲述了Python pickle模块用法。分享给大家供大家参考。具体分析如下:

pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。

pickle.dump(obj, file[, protocol])

序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。

pickle.load(file)

反序列化对象。将文件中的数据解析为一个Python对象。

其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错:

比如下面的例子

import pickle
class Person:
  def __init__(self,n,a):
    self.name=n
    self.age=a
  def show(self):
    print self.name+"_"+str(self.age)
aa = Person("JGood", 2)
aa.show()
f=open('d:\\p.txt','w')
pickle.dump(aa,f,0)
f.close()
#del Person
f=open('d:\\p.txt','r')
bb=pickle.load(f)
f.close()
bb.show()

如果不注释掉del Person的话,那么会报错如下:

>>> 
JGood_2

Traceback (most recent call last):
 File "C:/py/test.py", line 15, in <module>
  bb=pickle.load(f)
 File "C:\Python27\lib\pickle.py", line 1378, in load
  return Unpickler(file).load()
 File "C:\Python27\lib\pickle.py", line 858, in load
  dispatch[key](self)
 File "C:\Python27\lib\pickle.py", line 1069, in load_inst
  klass = self.find_class(module, name)
 File "C:\Python27\lib\pickle.py", line 1126, in find_class
  klass = getattr(mod, name)
AttributeError: 'module' object has no attribute 'Person'

意思就是当前模块找不到类的定义了。

clear_memo()

清空pickler的“备忘”。使用Pickler实例在序列化对象的时候,它会“记住”已经被序列化的对象引用,所以对同一对象多次调用dump(obj),pickler不会“傻傻”的去多次序列化。

看下面的例子:

import StringIO
import pickle
class Person:
  def __init__(self,n,a):
    self.name=n
    self.age=a
  def show(self):
    print self.name+"_"+str(self.age)
aa = Person("JGood", 2)
aa.show()
fle = StringIO.StringIO()
pick = pickle.Pickler(fle)
pick.dump(aa)
val1=fle.getvalue()
print len(val1)
pick.clear_memo()
pick.dump(aa)
val2=fle.getvalue()
print len(val2)
fle.close()

上面的代码运行如下:

>>> 
JGood_2
66
132
>>>

此时再注释掉pick.clear_memo()后,运行结果如下:

>>> 
JGood_2
66
70
>>>

主要是因为,python的pickle如果不clear_memo,则不会多次去序列化对象。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python合并文本文件示例
Feb 07 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
python输入错误密码用户锁定实现方法
Nov 27 Python
用pycharm开发django项目示例代码
Oct 24 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
python关于变量名的基础知识点
Mar 03 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
python函数map()和partial()的知识点总结
May 26 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 Python
Python游戏开发实例之graphics实现AI五子棋
Nov 01 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 Python
Python创建模块及模块导入的方法
May 27 #Python
Python类的用法实例浅析
May 27 #Python
Python socket编程实例详解
May 27 #Python
Python简单删除目录下文件以及文件夹的方法
May 27 #Python
python解析xml文件实例分析
May 27 #Python
Python定时执行之Timer用法示例
May 27 #Python
python定时执行指定函数的方法
May 27 #Python
You might like
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
进一步了解Python中的XML 工具
2015/04/13 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
Python处理PDF与CDF实例
2020/02/26 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
十一个高级MySql面试题
2014/10/06 面试题
中专自荐信
2013/10/13 职场文书
高中军训第一天感言
2014/03/06 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
卫生院健康教育实施方案
2014/06/07 职场文书
教师创先争优承诺书
2015/04/27 职场文书
Linux中sftp常用命令整理
2022/06/28 Servers