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实现给字典添加条目的方法
Sep 25 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
详谈python在windows中的文件路径问题
Apr 28 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
python爬虫之爬取笔趣阁小说
Apr 22 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 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
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
php判断变量类型常用方法
2012/04/24 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
python调用接口的4种方式代码实例
2019/11/19 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
易程科技软件测试笔试
2013/03/24 面试题
广告学专业推荐信范文
2013/11/23 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
委托书的写法
2014/08/30 职场文书
2015年药房工作总结
2015/04/25 职场文书
关于Python中*args和**kwargs的深入理解
2021/08/07 Python