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实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
Python实现的视频播放器功能完整示例
Feb 01 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
python删除不需要的python文件方法
Apr 24 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
python判断数字是否是超级素数幂
Sep 27 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
python selenium xpath定位操作
Sep 01 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实现框架(一)
2006/10/09 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
javascript中Function类型详解
2015/04/28 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
python对html代码进行escape编码的方法
2015/05/04 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
Python读写Excel表格的方法
2021/03/02 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
人力资源专员岗位职责
2014/01/30 职场文书
面试必备的求职信
2014/05/25 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS