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 相关文章推荐
RC4文件加密的python实现方法
Jun 30 Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
通过python连接Linux命令行代码实例
Feb 18 Python
Python request使用方法及问题总结
Apr 26 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
python3.4中清屏的处理方法
Jul 06 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 Python
python中Matplotlib绘制直线的实例代码
Jul 04 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
实现树状结构的两种方法
2006/10/09 PHP
PHP+DBM的同学录程序(2)
2006/10/09 PHP
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
php discuz 主题表和回帖表的设计
2009/03/13 PHP
php curl_init函数用法
2014/01/31 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
Python发展简史 Python来历
2019/05/14 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
Django实现内容缓存实例方法
2020/06/30 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
生日宴会答谢词
2014/01/09 职场文书
省文明单位申报材料
2014/05/08 职场文书
大学课外活动总结
2014/07/09 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
深入理解python多线程编程
2021/04/18 Python
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
一文搞懂redux在react中的初步用法
2021/06/09 Javascript