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获取用户IP地址的方法
May 11 Python
python读写json文件的简单实现
Apr 11 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
tensorflow 实现数据类型转换
Feb 17 Python
python批量修改文件名的示例
Sep 27 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
使用tensorflow 实现反向传播求导
May 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读取javascript设置的cookies的代码
2010/04/12 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
Vue header组件开发详解
2018/01/26 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
python中黄金分割法实现方法
2015/05/06 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
Java面向对象面试题
2016/12/26 面试题
自我鉴定四大框架
2014/01/17 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
小学运动会宣传稿
2015/07/23 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
golang slice元素去重操作
2021/04/30 Golang
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
Python中glob库实现文件名的匹配
2021/06/18 Python
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python