Python數據存儲:pickle模塊的使用講解

   在機器學習中,我們常常需要把訓練好的模型存儲起來,這樣在進行決策時直接將模型讀出,而不需要重新訓練模型,這樣就大大節約了時間。Python提供的pickle模塊就很好地解決了這個問題,它可以序列化對象並保存到磁盤中,並在需要的時候讀取出來,任何對象都可以執行序列化操作。

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

【作用】將obj的pickled對象寫入打開的文件對象file中

obj:是需要序列化處理的對象

file:文件對象,必須有一個write()方法,該方法接受一個字節參數。因此,它可以是爲二進制文件打開的文件對象寫入、io.BytesIO實例或其他自定義對象。

protocol:告訴pickler對象使用給定的協議,它能夠支持的協議有0、1、2、3、4。違約協議是3,爲Python 3設計的向後不兼容協議。貌似是爲了兼容性考慮的一個參數,不常用。

fix_imports:如果*fix_imports*爲真且協議小於3,pickle將嘗試將新的Python 3名稱映射到Python中使用的舊模塊名稱2,這樣pickle數據流可以用Python 2讀取。也是爲了兼容性考慮,這裏不做贅述了。默認設置可以達到兼容需求。

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

【作用】將對象的pickled表示形式(obj)返回爲bytes對象。

參數同pickle.dump方法

2.pickle.load(file, *, fix_imports=True, encoding='ASCII', errors='strict')

這裏並沒有protocol參數,這是因爲pickle的協議版本是自動檢測的,超過pickled對象的字節數表示將被忽略。

【作用】從存儲在文件中的pickle數據讀取並返回對象

file:必須有兩個方法,一個read(intNumber)方法和一個readline()方法。兩個方法都應該返回字節,因此該參數可以是打開要讀取的二進制文件對象、io.BytesIO對象或任何符合條件的自定義對象。

fix_imports、encoding、errors:這三個參數可選,用於控制pickle流的兼容性支持。如果fix-imports爲真,pickle將嘗試將舊的Python 2名稱映射到Python 3中使用的新名稱。encoding、errors參數告訴pickle如何解碼8位字符串,默認解碼方式和容錯機制爲“ASCII”和“strict”。也是爲了兼容性考慮,不常用。

pickle.loads(data, *, fix_imports=True, encoding='ASCII', errors='strict')

【作用】從給定的pickle數據讀取並返回對象。

參數作用用法參照pickle.loads()方法。

(3)pickle.dumps(obj[, protocol])

       函數的功能:將obj對象序列化爲string形式,而不是存入文件中。

       參數講解:

  • obj:想要序列化的obj對象。
  • protocal:如果該項省略,則默認爲0。如果爲負值或HIGHEST_PROTOCOL,則使用最高的協議版本。

(4)pickle.loads(string)

       函數的功能:從string中讀出序列化前的obj對象。

       參數講解:

  • string:文件名稱。

     【注】 dump() 與 load() 相比 dumps() 和 loads() 還有另一種能力dump()函數能一個接着一個地將幾個對象序列化存儲到同一個文件中,隨後調用load()來以同樣的順序反序列化讀出這些對象。

 

 

 


 

參考:https://www.cnblogs.com/fmgao-technology/p/9078918.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章