99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀Python存儲(chǔ)對(duì)象 (pickle包,cPickle包)
Python存儲(chǔ)對(duì)象 (pickle包,cPickle包)
2017-04-17
收藏

Python存儲(chǔ)對(duì)象 (pickle包,cPickle包)

在之前對(duì)Python對(duì)象的介紹中 (面向?qū)ο蟮幕靖拍?,面向?qū)ο蟮倪M(jìn)一步拓展),我提到過Python“一切皆對(duì)象”的哲學(xué),在Python中,無(wú)論是變量還是函數(shù),都是一個(gè)對(duì)象。當(dāng)Python運(yùn)行時(shí),對(duì)象存儲(chǔ)在內(nèi)存中,隨時(shí)等待系統(tǒng)的調(diào)用。然而,內(nèi)存里的數(shù)據(jù)會(huì)隨著計(jì)算機(jī)關(guān)機(jī)和消失,如何將對(duì)象保存到文件,并儲(chǔ)存在硬盤上呢?

計(jì)算機(jī)的內(nèi)存中存儲(chǔ)的是二進(jìn)制的序列 (當(dāng)然,在Linux眼中,是文本流)。我們可以直接將某個(gè)對(duì)象所對(duì)應(yīng)位置的數(shù)據(jù)抓取下來(lái),轉(zhuǎn)換成文本流 (這個(gè)過程叫做serialize),然后將文本流存入到文件中。由于Python在創(chuàng)建對(duì)象時(shí),要參考對(duì)象的類定義,所以當(dāng)我們從文本中讀取對(duì)象時(shí),必須在手邊要有該對(duì)象的類定義,才能懂得如何去重建這一對(duì)象。從文件讀取時(shí),對(duì)于Python的內(nèi)建(built-in)對(duì)象 (比如說(shuō)整數(shù)、詞典、表等等),由于其類定義已經(jīng)載入內(nèi)存,所以不需要我們?cè)僭诔绦蛑卸x類。但對(duì)于用戶自行定義的對(duì)象,就必須要先定義類,然后才能從文件中載入對(duì)象 (比如面向?qū)ο蟮幕靖拍钪械膶?duì)象那個(gè)summer)。
pickle包
對(duì)于上述過程,最常用的工具是Python中的pickle包。
1) 將內(nèi)存中的對(duì)象轉(zhuǎn)換成為文本流:
import pickle

# define class
class Bird(object):
    have_feather = True
    way_of_reproduction  = 'egg'

summer       = Bird()                 # construct an object
picklestring = pickle.dumps(summer)   # serialize object
使用pickle.dumps()方法可以將對(duì)象summer轉(zhuǎn)換成了字符串 picklestring(也就是文本流)。隨后我們可以用普通文本的存儲(chǔ)方法來(lái)將該字符串儲(chǔ)存在文件(文本文件的輸入輸出)。
當(dāng)然,我們也可以使用pickle.dump()的方法,將上面兩部合二為一:
import pickle

# define class
class Bird(object):
    have_feather = True
    way_of_reproduction  = 'egg'

summer       = Bird()                        # construct an object
fn           = 'a.pkl'
with open(fn, 'w') as f:                     # open file with write-mode
    picklestring = pickle.dump(summer, f)   # serialize and save object
對(duì)象summer存儲(chǔ)在文件a.pkl
2) 重建對(duì)象
首先,我們要從文本中讀出文本,存儲(chǔ)到字符串 (文本文件的輸入輸出)。然后使用pickle.loads(str)的方法,將字符串轉(zhuǎn)換成為對(duì)象。要記得,此時(shí)我們的程序中必須已經(jīng)有了該對(duì)象的類定義。
此外,我們也可以使用pickle.load()的方法,將上面步驟合并:
import pickle

# define the class before unpickle
class Bird(object):
    have_feather = True
    way_of_reproduction  = 'egg'

fn     = 'a.pkl'
with open(fn, 'r') as f:
    summer = pickle.load(f)   # read file and build object
cPickle包
cPickle包的功能和用法與pickle包幾乎完全相同 (其存在差別的地方實(shí)際上很少用到),不同在于cPickle是基于c語(yǔ)言編寫的,速度是pickle包的1000倍。對(duì)于上面的例子,如果想使用cPickle包,我們都可以將import語(yǔ)句改為:數(shù)據(jù)分析師培訓(xùn)
import cPickle as pickle
就不需要再做任何改動(dòng)了。
總結(jié)
對(duì)象 -> 文本 -> 文件
pickle.dump(), pickle.load(), cPickle

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }