python pickle——萬能持久化工具

前言

今天的故事從持久化開始,最早知道持久化這個(gè)是上歷史課上,太祖論斷的xxx持久化,從此持久化就是一個(gè)高端、大氣、上檔次的詞語。后來轉(zhuǎn)行當(dāng)程序員,老是聽小伙伴說數(shù)據(jù)持久化,不明覺厲,不過因?yàn)閼?,也沒去搞明白是啥意思!今天剛好想學(xué)習(xí)pickle的知識(shí),看到了持久化一詞,去查了一下,哦,原來如此,妙不可言——果然是假大空!我已經(jīng)淺薄地理解為把數(shù)據(jù)存儲(chǔ)起來!

之前在python基礎(chǔ)里面我們有談到過python文件讀寫,其實(shí)就是一種字符串的持久化方式。那么我們可以把數(shù)據(jù)想辦法裝換為字符串,就可以實(shí)現(xiàn)數(shù)據(jù)的持久化。那么有沒有更好的方式呢?當(dāng)然有啦,今天一起學(xué)習(xí)python特有的數(shù)據(jù)持久化模塊pickle。

pickle詳解

  • 把對(duì)象存儲(chǔ)到文件中
    pickle.dump(obj, file[, protocol])
    其中file是文件對(duì)象,open(file_name, "wb"), 以二進(jìn)制格式寫入
# 定義對(duì)象
a = [1, 2, 3, 4]

# 存儲(chǔ)到a.pkl
pickle.dump(a, open("a.pkl", "wb"))
  • 加載存儲(chǔ)的pickle文件:
    pickle.load(file)
    其中file是文件對(duì)象,open(file_name, "rb"), 以二進(jìn)制格式讀取
a = pickle.dump(open("a.pkl", "rb"))
print(a)  # 輸出 [1, 2, 3, 4]
  • pickle還能就像序列化,把數(shù)據(jù)轉(zhuǎn)化為pickle二進(jìn)制的bytes,對(duì)應(yīng)的方法是pickle.dumps(obj), pickle.loads(obj)
  • 對(duì)于pickle,數(shù)據(jù)寫入是什么類型,加載后就是什么類型,特別簡單方便。pickle支持存儲(chǔ)自定義類型,但是加載的時(shí)候自定義數(shù)據(jù)類型必須import或者加載類 [1]。

寫在最后

pickle的口號(hào)是,一切都對(duì)象皆可持久化,簡單方便直接暴力美啊,大家有什么想存儲(chǔ)的對(duì)象,趕緊用pickle吧!pickle還有一個(gè)小兄弟json,它能對(duì)json格式對(duì)象進(jìn)行持久化或者加載,json格式文件在很多語言都是通用的,所以處理json文件時(shí)候建議使用json模塊。類似numpy里面也定義了save持久化的函數(shù),但是底層其實(shí)是使用的pickle方法...

名詞解釋

  • 持久化(Persistence),即把數(shù)據(jù)(如內(nèi)存中的對(duì)象)保存到可永久保存的存儲(chǔ)設(shè)備中(如磁盤)。持久化的主要應(yīng)用是將內(nèi)存中的對(duì)象存儲(chǔ)在數(shù)據(jù)庫中,或者存儲(chǔ)在磁盤文件中、XML數(shù)據(jù)文件中等等。)
  • 序列化 (Serialization)是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程。在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲(chǔ)區(qū)。以后,可以通過從存儲(chǔ)區(qū)中讀取或反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象。

參考

  1. https://www.liujiangblog.com/course/python/66
  2. https://www.cnblogs.com/hyjj/p/5746849.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容