本文实例讲述了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 hashlib模块用法实例分析,包括了Python hashlib模块用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python hashlib模块用法。分享给大家供大家参考,具体如下: 一、hashlib基本使用 python中的hashlib模块用来进行hash或者md5加密,而且这种加密是不可逆的,所以这种算法又被称为摘要算法。其支持Open
本文向大家介绍Python中random模块用法实例分析,包括了Python中random模块用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python中random模块用法。分享给大家供大家参考。具体如下: 运行结果如下: (2, 'cherry') 不管学哪个语言,我总喜欢弄个随机数玩玩。农历十一月初六,Let's Python!!! 运行结果如下: 5050 运行结果如
本文向大家介绍Python异常模块traceback用法实例分析,包括了Python异常模块traceback用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python异常模块traceback用法。分享给大家供大家参考,具体如下: traceback模块被用来跟踪异常返回信息. 如下例所示: 将会在控制台输出类似结果: Traceback (most recent call
本文向大家介绍Node.js API详解之 Error模块用法实例分析,包括了Node.js API详解之 Error模块用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Node.js API详解之 Error模块用法。分享给大家供大家参考,具体如下: Node.js API详解之 Error Node.js 中运行的应用程序一般会遇到以下四类错误: 1.标准的 JavaScr
本文向大家介绍Node.js API详解之 util模块用法实例分析,包括了Node.js API详解之 util模块用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Node.js API详解之 util模块用法。分享给大家供大家参考,具体如下: Node.js API详解之 util util 模块主要用于支持 Node.js 内部 API 的需求。提供了大部分实用工具。 通
本文向大家介绍Python模块的制作方法实例分析,包括了Python模块的制作方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python模块的制作方法。分享给大家供大家参考,具体如下: 1 目的 利用setup.py将框架安装到python环境中,作为第三方模块来调用, 2 第一步:完成setup.py的编写 以下代码相当于一个模板,只用更改name字段出,改为对应的需要安装