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实现批量改文件名称的方法
May 25 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
python3实现的zip格式压缩文件夹操作示例
Aug 17 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
Python多进程编程常用方法解析
Mar 26 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编程每天必学之验证码
2016/03/03 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
php提取微信账单的有效信息
2018/10/01 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
JS实现星星海特效
2019/12/24 Javascript
Python实现接受任意个数参数的函数方法
2018/04/21 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
Linux如何为某个操作添加别名
2013/03/01 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
航空大学应届生求职信
2013/11/10 职场文书
文言文形式的学生求职信
2013/12/03 职场文书
检查接待方案
2014/02/27 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
劳动仲裁调解书
2015/05/20 职场文书
死亡诗社观后感
2015/06/05 职场文书
提档介绍信范文
2015/10/22 职场文书
家访教师心得体会
2016/01/23 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
详解nodejs内置模块
2021/05/06 NodeJs