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创建和删除目录的方法
Apr 29 Python
Python通过poll实现异步IO的方法
Jun 04 Python
在Django的模板中使用认证数据的方法
Jul 23 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
python3中的md5加密实例
May 29 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
在Python中增加和插入元素的示例
Nov 01 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 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/05/09 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
pandas对指定列进行填充的方法
2018/04/11 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
python实现网站微信登录的示例代码
2019/09/18 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
django框架ModelForm组件用法详解
2019/12/11 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
高级销售员求职信
2013/10/25 职场文书
公司合作协议书范本
2014/04/18 职场文书
端午节寄语2015
2015/03/23 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP