国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python pickle模塊用法實(shí)例分析

2020-02-23 01:26:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了Python pickle模塊用法。分享給大家供大家參考。具體分析如下:

pickle提供了一個(gè)簡(jiǎn)單的持久化功能。可以將對(duì)象以文件的形式存放在磁盤(pán)上。

pickle.dump(obj, file[, protocol])

序列化對(duì)象,并將結(jié)果數(shù)據(jù)流寫(xiě)入到文件對(duì)象中。參數(shù)protocol是序列化模式,默認(rèn)值為0,表示以文本的形式序列化。protocol的值還可以是1或2,表示以二進(jìn)制的形式序列化。

pickle.load(file)

反序列化對(duì)象。將文件中的數(shù)據(jù)解析為一個(gè)Python對(duì)象。

其中要注意的是,在load(file)的時(shí)候,要讓python能夠找到類(lèi)的定義,否則會(huì)報(bào)錯(cuò):

比如下面的例子

import pickleclass 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 Personf=open('d://p.txt','r')bb=pickle.load(f)f.close()bb.show()

如果不注釋掉del Person的話,那么會(huì)報(bào)錯(cuò)如下:

>>> JGood_2Traceback (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'

意思就是當(dāng)前模塊找不到類(lèi)的定義了。

clear_memo()

清空pickler的“備忘”。使用Pickler實(shí)例在序列化對(duì)象的時(shí)候,它會(huì)“記住”已經(jīng)被序列化的對(duì)象引用,所以對(duì)同一對(duì)象多次調(diào)用dump(obj),pickler不會(huì)“傻傻”的去多次序列化。

看下面的例子:

import StringIOimport pickleclass 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()

上面的代碼運(yùn)行如下:

>>> JGood_266132>>> 

此時(shí)再注釋掉pick.clear_memo()后,運(yùn)行結(jié)果如下:

>>> JGood_26670>>> 

主要是因?yàn)椋琾ython的pickle如果不clear_memo,則不會(huì)多次去序列化對(duì)象。

希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 潞西市| 黑河市| 鄢陵县| 金华市| 岱山县| 兴安盟| 靖边县| 滦南县| 崇仁县| 栖霞市| 庆元县| 长丰县| 沙雅县| 吴江市| 新昌县| 荔波县| 沐川县| 水城县| 广饶县| 山丹县| 翁牛特旗| 潢川县| 花垣县| 垣曲县| 庆元县| 郧西县| 广水市| 阿坝县| 永宁县| 延川县| 华宁县| 凯里市| 芮城县| 五莲县| 和硕县| 颍上县| 新建县| 汉川市| 绵阳市| 荔波县| 鹤壁市|