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的Django框架中自定义模版标签的示例
Jul 20 Python
对Python进行数据分析_关于Package的安装问题
May 22 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
解决Mac安装scrapy失败的问题
Jun 13 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
Python遍历字典方式就实例详解
Dec 28 Python
Python @property原理解析和用法实例
Feb 11 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 Python
Python 如何定义匿名或内联函数
Aug 01 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学习笔记之 函数声明
2011/06/09 PHP
浅谈php自定义错误日志
2015/02/13 PHP
php检测url是否存在的方法
2015/04/14 PHP
PHP加密解密类实例代码
2016/07/20 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
JavaScript 10件让人费解的事情
2010/02/15 Javascript
js获取域名的方法
2015/01/27 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
python基础教程之Hello World!
2014/08/29 Python
python实现在windows下操作word的方法
2015/04/28 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
python实现淘宝秒杀脚本
2020/06/23 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
送给他或她的礼物:FUN.com
2018/08/17 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
服务中心夜班服务员岗位职责
2013/11/27 职场文书
致铅球运动员广播稿精选
2014/01/12 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
邀请函格式范文
2015/02/02 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
党校培训学习心得体会
2016/01/06 职场文书