回覆列表
  • 1 # 魏智勇

    Python的pickle序列化操作實際上是把要儲存的內容序列化儲存處理的,要讀取的時候則同樣逆向完成便可實現。這兩個過程是透過dumps() 和 loads() 兩個函式來實現的。比如,類似[1,2,3,"abc","python"] 的列表,在使用pickle後,變成

    類似(lp1\nI1\naI2\naI3\naS"abc"\np2\naS"python"\np3\na這樣的扁平化字串儲存起來。

  • 2 # 軟體測試開發技術棧

    cpickle

    在python中,一般使用pickle類來進行python物件的序列化,同時cPickle(C語言編譯版本)提供了一個更快速簡單的實現,如官方文件所說的:"cPickle – A faster pickle",其速度大概是pickle的1000倍,因此在大多數應用程式中通常優先使用cPickle (cPickle 除了不能被繼承之外,它與pickle使用基本上區別不大)。

    cPickle可以對任意一種型別的python物件進行序列化操作,比如list,dict,甚至是一個類的物件等。

    在cPickle中,我們使用下面方式把資料持久化至檔案中:

    dump函式——序列化

    需要指定兩個引數,第一個是需要序列化的python物件名稱,第二個是本地的檔案,需要使用open函式以"寫"模式開啟檔案。

    load函式——反序列化

    載入本地檔案,載入為python物件,加載出來的物件無須進行格式轉換。如果透過一般寫入的方式實現資料的持久化,那麼在讀出資料時,需要額外進行資料型別的轉換。

    輸出

    請注意,cPickle是python2 的庫,在python3.x版本,改名為pickle。

    缺點

    pickle模組使用的資料格式是python專用的,並且不同版本不向後相容,同時也不能被其他語言說識別。使用pickle存在安全風險,切勿反序列化不受信任或未經身份驗證的pickle位元組串,比如透過程式碼獲得檔案列表,進一步也可以獲取檔案操作等許可權:

    輸出

    因此 pickle 方案不適合用於網路通訊,可以改用另一種序列化方式,如JSON。

  • 中秋節和大豐收的關聯?
  • 手心腳心發燙發熱是什麼原因並且出汗該吃什麼?