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 相关文章推荐
Python3基础之条件与循环控制实例解析
Aug 13 Python
简单的编程0基础下Python入门指引
Apr 01 Python
在Python中使用判断语句和循环的教程
Apr 25 Python
Python中的choice()方法使用详解
May 15 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Python优先队列实现方法示例
Sep 21 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
Django框架实现的简单分页功能示例
Dec 04 Python
Django中create和save方法的不同
Aug 13 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Python基于xlrd模块处理合并单元格
Jul 28 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 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
PHP开发需要注意的安全问题
2010/09/01 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
HTML5新标签兼容——&gt; 的两种方法
2018/09/12 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
网页美工求职信范文
2014/04/17 职场文书
创先争优演讲稿
2014/09/15 职场文书
离职信范文
2015/06/23 职场文书
2016教师节感恩话语
2015/12/09 职场文书
宪法宣传标语100条
2019/10/15 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis