python核心模組之pickle和cPickle講解

dicksonjyl560101發表於2017-12-25


pickle模組使用的資料格式是python專用的,並且不同版本不向後相容,同時也不能被其他語言說識別。要和其他語言互動,可以使用內建的json 包使用pickle模組你可以把Python物件直接儲存到檔案,而不需要把他們轉化為字串,也不用底層的檔案訪問操作把它們寫入到一個二進位制檔案裡。 pickle模組會建立一個python語言專用的二進位制格式,你基本上不用考慮任何檔案細節,它會幫你乾淨利落地完成讀寫獨享操作,唯一需要的只是一個合法的檔案控制程式碼。

pickle 主要函式

pickle模組中的兩個主要函式是dump()和load()。dump()函式接受一個檔案控制程式碼和一個資料物件作為引數,把資料物件以特定的格式儲存到給定的檔案中。當我們使用load()函式從檔案中取出已儲存的物件時,pickle知道如何恢復這些物件到它們本來的格式。

dumps()函式執行和dump() 函式相同的序列化,但是與dump不同的dumps並不將轉換後的字串寫入檔案,而是將所得到的轉換後的資料以字串的形式返回。

loads()函式執行和load()函式一樣的反序列化。 loads接受一個字串引數,將字串解碼成為python的資料型別,函式loads和dumps進行的是互逆的操作。

cPickle是pickle得一個更快得C語言編譯版本。

pickle的dump和load相當於java的序列化和反序列化操作

pickle用法示例

#! /usr/local/env python # -*- coding=utf-8 -*-   if __name__ == "__main__": import cPickle   #序列化到檔案 obj = 123,"abcdedf",["ac",123],{"key":"value","key1":"value1"} print obj #輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'}) #r 讀寫許可權 r b 讀寫到二進位制檔案 f = open(r"d:\a.txt","r ") cPickle.dump(obj,f) f.close() f = open(r"d:\a.txt") print cPickle.load(f) #輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})   #序列化到記憶體(字串格式儲存),然後物件可以以任何方式處理如透過網路傳輸 obj1 = cPickle.dumps(obj) print type(obj1) #輸出:<type 'str'> print obj1 #輸出:python專用的儲存格式 obj2 = cPickle.loads(obj1) print type(obj2) #輸出:<type 'tuple'> print obj2 #輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})

當然啦,你dump幾次,也就是需要load幾次,不要希望dump了三次,load給你返回一個list。

參考

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2149211/,如需轉載,請註明出處,否則將追究法律責任。

相關文章