序列化和反序列化模塊pickle介紹 | Python庫(kù)

1 前言

在“通過(guò)簡(jiǎn)單示例來(lái)理解什么是機(jī)器學(xué)習(xí)”這篇文章里提到了pickle庫(kù)的使用晦攒,本文來(lái)做進(jìn)一步的闡述纠脾。

pickle是python語(yǔ)言的一個(gè)標(biāo)準(zhǔn)模塊巩螃,安裝python后已包含pickle庫(kù)璧针,不需要單獨(dú)再安裝。

pickle模塊實(shí)現(xiàn)了基本的數(shù)據(jù)序列化和反序列化十厢。通過(guò)pickle模塊的序列化操作我們能夠?qū)⒊绦蛑羞\(yùn)行的對(duì)象信息保存到文件中去等太,永久存儲(chǔ);通過(guò)pickle模塊的反序列化操作蛮放,我們能夠從文件中創(chuàng)建上一次程序保存的對(duì)象缩抡。

在官方的介紹中,序列化操作的英文描述有好幾個(gè)單詞包颁,如"serializing", "pickling", "serialization", "marshalling" 或者"flattening"等瞻想,它們都代表的是序列化的意思压真。相應(yīng)的,反序列化操作的英文單詞也有好多個(gè)蘑险,如"de-serializing", "unpickling", "deserailization"等滴肿。為了避免混淆,一般用"pickling"/"unpickling", 或者"serialization"/"deserailization"佃迄。

pickle模塊是以二進(jìn)制的形式序列化后保存到文件中(保存文件的后綴為".pkl")泼差,不能直接打開(kāi)進(jìn)行預(yù)覽。而python的另一個(gè)序列化標(biāo)準(zhǔn)模塊json呵俏,則是human-readable的堆缘,可以直接打開(kāi)查看(例如在notepad++中查看)。

pickle模塊有兩類主要的接口柴信,即序列化和反序列化套啤。

其中序列化操作包括:

  • pickle.dump()
  • Pickler(file, protocol).dump(obj)

反序列化操作包括:

  • pickle.load()
  • Unpickler(file).load()

2 序列化操作

2.1 序列化方法pickle.dump()

序列化的方法為 pickle.dump()宽气,該方法的相關(guān)參數(shù)如下:

pickle.dump(obj, file, protocol=None,*,fix_imports=True)

該方法實(shí)現(xiàn)的是將序列化后的對(duì)象obj以二進(jìn)制形式寫(xiě)入文件file中随常,進(jìn)行保存。它的功能等同于 Pickler(file, protocol).dump(obj)萄涯。

關(guān)于參數(shù)file绪氛,有一點(diǎn)需要注意,必須是以二進(jìn)制的形式進(jìn)行操作(寫(xiě)入)涝影。
參考前文的案例如下:

import pickle

with open('svm_model_iris.pkl', 'wb') as f:
    pickle.dump(svm_classifier, f)

file為'svm_model_iris.pkl'枣察,并且以二進(jìn)制的形式('wb')寫(xiě)入。

關(guān)于參數(shù)protocol燃逻,一共有5中不同的類型序目,即(0,1,2,3,4)。(0,1,2)對(duì)應(yīng)的是python早期的版本伯襟,(3,4)則是在python3之后的版本猿涨。

此外,參數(shù)可選 pickle.HIGHEST_PROTOCOL和pickle.DEFAULT_PROTOCOL姆怪。當(dāng)前叛赚,python3.5版本中,pickle.HIGHEST_PROTOCOL的值為4稽揭,pickle.DEFAULT_PROTOCOL的值為3俺附。當(dāng)protocol參數(shù)為負(fù)數(shù)時(shí),表示選擇的參數(shù)是pickle.HIGHEST_PROTOCOL溪掀。

關(guān)于參數(shù)protocol事镣,官方的詳細(xì)介紹如下:

pickle01-s.jpg

2.2 序列化方法pickle.dumps()

pickle.dumps()方法的參數(shù)如下:

pickle.dumps(obj, protocol=None,*,fix_imports=True)

pickle.dumps()方法跟pickle.dump()方法的區(qū)別在于,pickle.dumps()方法不需要寫(xiě)入文件中揪胃,它是直接返回一個(gè)序列化的bytes對(duì)象璃哟。

2.3 序列化方法Pickler(file, protocol).dump(obj)

pickle模塊提供了序列化的面向?qū)ο蟮念惙椒ㄟ肱眩?class pickle.Pickler(file, protocol=None,*,fix_imports=True),Pickler類有dump()方法。

Pickler(file, protocol).dump(obj) 實(shí)現(xiàn)的功能跟 pickle.dump() 是一樣的沮稚。

關(guān)于Pickler類的其他method艺沼,請(qǐng)參考官方API。

3 反序列化操作

3.1 反序列化方法pickle.load()

序列化的方法為 pickle.load()蕴掏,該方法的相關(guān)參數(shù)如下:
pickle.load(file, *,fix_imports=True, encoding="ASCII". errors="strict")
該方法實(shí)現(xiàn)的是將序列化的對(duì)象從文件file中讀取出來(lái)障般。它的功能等同于 Unpickler(file).load()

關(guān)于參數(shù)file盛杰,有一點(diǎn)需要注意挽荡,必須是以二進(jìn)制的形式進(jìn)行操作(讀取)即供。
參考前文的案例如下:

import pickle

with open('svm_model_iris.pkl', 'rb') as f:
    model = pickle.load(f)

file為'svm_model_iris.pkl'定拟,并且以二進(jìn)制的形式('rb')讀取。

讀取的時(shí)候逗嫡,參數(shù)protocol是自動(dòng)選擇的青自,load()方法中沒(méi)有這個(gè)參數(shù)。

3.2 反序列化方法pickle.loads()

pickle.loads()方法的參數(shù)如下:

pickle.loads(bytes_object, *,fix_imports=True, encoding="ASCII". errors="strict")

pickle.loads()方法跟pickle.load()方法的區(qū)別在于驱证,pickle.loads()方法是直接從bytes對(duì)象中讀取序列化的信息延窜,而非從文件中讀取。

3.3 反序列化方法Unpickler(file).load()

pickle模塊提供了反序列化的面向?qū)ο蟮念惙椒ǔ?class pickle.Unpickler(file, *,fix_imports=True, encoding="ASCII". errors="strict"),Pickler類有l(wèi)oad()方法逆瑞。

Unpickler(file).load() 實(shí)現(xiàn)的功能跟 pickle.load() 是一樣的。

關(guān)于Unpickler類的其他method伙单,請(qǐng)參考官方API获高。

4 那些類型可以進(jìn)行序列化和反序列化操作

官方文檔是這么介紹的,這里我就不進(jìn)一步描述了吻育。

pickle02-s.jpg

寫(xiě)在后面

pickle模塊還是比較實(shí)用的念秧,當(dāng)然,關(guān)于pickle模塊扫沼,其實(shí)還有許多的信息可以去了解出爹,想了解更多信息的童鞋,建議可以閱讀下python官方的API文檔(library文件)缎除。

由于個(gè)人精力有限严就,簡(jiǎn)書(shū)上文章更新較慢,實(shí)在抱歉器罐。歡迎關(guān)注微信公眾號(hào)(ID:PyDataRoad)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梢为,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铸董,老刑警劉巖祟印,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粟害,居然都是意外死亡蕴忆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)悲幅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)套鹅,“玉大人,你說(shuō)我怎么就攤上這事汰具∽柯梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵留荔,是天一觀的道長(zhǎng)吟孙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)聚蝶,這世上最難降的妖魔是什么杰妓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮既荚,結(jié)果婚禮上稚失,老公的妹妹穿的比我還像新娘栋艳。我一直安慰自己恰聘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吸占。 她就那樣靜靜地躺著晴叨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矾屯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音忆谓,去河邊找鬼夜赵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛排作,可吹牛的內(nèi)容都是我干的牵啦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妄痪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哈雏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤裳瘪,失蹤者是張志新(化名)和其女友劉穎土浸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體彭羹,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黄伊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了派殷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毅舆。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖愈腾,靈堂內(nèi)的尸體忽然破棺而出憋活,到底是詐尸還是另有隱情,我是刑警寧澤虱黄,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布悦即,位于F島的核電站,受9級(jí)特大地震影響橱乱,放射性物質(zhì)發(fā)生泄漏辜梳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一泳叠、第九天 我趴在偏房一處隱蔽的房頂上張望作瞄。 院中可真熱鬧,春花似錦危纫、人聲如沸宗挥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)契耿。三九已至,卻和暖如春螃征,著一層夾襖步出監(jiān)牢的瞬間搪桂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工盯滚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踢械,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓魄藕,卻偏偏與公主長(zhǎng)得像内列,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泼疑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理德绿,服務(wù)發(fā)現(xiàn)荷荤,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 0x01 前言 前兩天在安全客中看了一篇python對(duì)象注入的文章移稳,感覺(jué)寫(xiě)的很好蕴纳,就學(xué)習(xí)一下,在此記錄一下个粱。 0x...
    Pino_HD閱讀 1,083評(píng)論 0 0
  • http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958...
    喵在野閱讀 320評(píng)論 0 0
  • 開(kāi)學(xué)后的一切逐漸進(jìn)入正軌古毛,早上六七點(diǎn)鐘聽(tīng)著鬧鈴的響聲也要脫掉假期的懶散去教室上課,手機(jī)也不是隨手捧在掌心低頭狂刷都许,...
    誰(shuí)動(dòng)了我的斯達(dá)舒閱讀 367評(píng)論 30 5
  • 2017年6月23日稻薇,中國(guó)音樂(lè)學(xué)院的師生們重又唱起了歌劇《小二黑結(jié)婚》,老曲新唱胶征,平添新意塞椎。在金錢(qián)財(cái)富面現(xiàn),今人還...
    北塔雪松閱讀 1,324評(píng)論 81 215