Python序列化 pickle和json

2021-08-15 03:14:32 字數 2932 閱讀 5643

序列化 (serialization)將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區。以後,可以通過從儲存區中讀取或反序列化物件的狀態,重新建立該物件。

變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,序列化之後,就可以把序列化後的內容寫入磁碟,或者通過網路傳輸到別的機器上,把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化。

比較通用的標準化的有json和xml格式,可以在不同的語言之間和系統之間傳遞物件,python也有內建的pickle,該格式只能用於python內部,不同的版本之間都有可能不相容。

python提供兩個模組來實現序列化:cpickle和pickle。這兩個模組功能是一樣的,區別在於cpickle是c語言寫的,速度快,pickle是純python寫的。

通過呼叫pickle的dumps方法,可以將把任意物件序列化成乙個str,通過呼叫loads方法可以將str序列化成物件,dump可以直接將物件序列化寫入檔案中,load直接將檔案中的內容反序列化成物件。

如下所示:

#dict

物件

mymsg=dict

(name='ctx'

,age='50'

,add='shanghai'

)

#

序列化成字串

str=pickle.dumps(mymsg)printstr

#

直接寫入檔案

file=open

("serialize.pickle"

,'wb'

)pickle.dump(mymsg,file)

file.close()

#直接將檔案內容反序列化成物件

file=open

("serialize.pickle"

,'rb'

)d=pickle.load(file)

file.close()printd

結果如下所示:

dp1s'add'

p2s'shanghai'

p3ss'age'

p4s'50'

p5ss'name'

p6s'ctx'

p7s.

生成檔案serialize.pickle,其文字內容顯示與str結果一致。

json的序列化和反序列化的格式與pickle相似,通過呼叫dump和load方法來完成。

分別對dict、int、str和float變數序列化為json,如下所示

importjson

mymsg=dict

(name='ctx'

,age='50'

,add='shanghai'

)list=[10,

15,16,

17]id=10

hardstr="no"

pi=3.1415

jsonstr=json.dumps(mymsg)print"my msg json str:"+json.dumps(mymsg)print"list json str:"+json.dumps(list)

print"hartstr json str:"+json.dumps(hardstr)print"id json str:"+json.dumps(id)print"pi json str:"+json.dumps(pi)

則結果如下:

my msg json str:

list json str[10, 15, 16, 17]

id json str:10

hartstr json str:"no"

pi json str:3.1415

同pickle,dump可以將序列化結果輸入到檔案中

loads可以將json格式的字串反序列化生成物件

load可以將json格式的檔案中的內容反序列化生成物件

例如編寫一下json格式的config檔案

反序列化操作如下:

file=open

("config"

,'rb'

)readob=json.load(file)printreadob

結果如下:

json中表示的資料型別與python變數型別對應如下,在一些場合下可以將其寫成配置檔案寫成json格式配置檔案比較清晰和方便。

json型別

python型別

dict

list

"string"

'str'或u'unicode'

1234.56

int或float

true/false

true/false

null

none

Python序列化與反序列化pickle用法例項

要將python物件作為乙個檔案的形式儲存到磁碟,就叫序列化 當我們需要用到這個這物件,再從磁碟載入這個物件,就叫反序列化 python自帶的pickle可以幫我們實現,pickle這個單詞是鹹菜的意思,鹹菜耐儲存,是不是很形象呀?物件的儲存分為兩步 1.將物件在記憶體中的資料抓取取來,轉換成乙個有...

python 實用pickle序列化

儲存資料結構到乙個檔案中稱為序列化。相json這樣的格式需要定製的序列化資料的轉換器。python提供了pickle模組以特殊的二進位制格式儲存和恢復資料物件。還記得json解析datetime物件時出現問題?但對於pickle就不存在問題 import pickle import diatomit...

Python中的pickle序列化

import pickle 需要被序列化的資料 obj 123,1,2,3 hello world 序列化到檔案a.pkl with open r a.pkl wb as f pickle.dump obj,f 載入並列印序列化資料 with open r a.pkl rb as f print p...