序列化 (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,如下所示
importjsonmymsg=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...