1. 程式人生 > >python之序列化

python之序列化

很多 tro 回來 splay pickle模塊 pytho odi 遠程 class

什麽叫序列化?

序列化是指把內存裏的數據類型轉變成字符串,以使其能存儲到硬盤或通過網絡傳輸到遠程,因為硬盤或網絡傳輸時只能接受bytes。

把字符轉換成內存數據類型,叫反序列化。

為什麽要序列化?

你打遊戲過程中,打累了,停下來,關掉遊戲、想過2天再玩,2天之後,遊戲又從你上次停止的地方繼續運行,你上次遊戲的進度肯定保存在硬盤上了,是以何種形式呢?遊戲過程中產生的很多臨時數據是不規律的,可能在你關掉遊戲時正好有10個列表,3個嵌套字典的數據集合在內存裏,需要存下來?你如何存?把列表變成文件裏的多行多列形式?那嵌套字典呢?根本沒法存。所以,若是有種辦法可以直接把內存數據存到硬盤上,下次程序再啟動,再從硬盤上讀回來,還是原來的格式的話,那是極好的。

用於序列化的兩個模塊

  • json,用於字符串 和 python數據類型間進行轉換
  • pickle,用於python特有的類型 和 python的數據類型間進行轉換

Json模塊提供了四個功能:dumps、dump、loads、load

pickle模塊提供了四個功能:dumps、dump、loads、load

import pickle
data = {k1:123,k2:Hello}

# pickle.dumps 將數據通過特殊的形式轉換位只有python語言認識的字符串
p_str = pickle.dumps(data)
print(p_str)

#pickle.dump 將數據通過特殊的形式轉換位只有python語言認識的字符串,並寫入文件
with open(D:/result.pk,wb,encoding=utf8) as fp: pickle.dump(data,fp) import json # json.dumps 將數據通過特殊的形式轉換位所有程序語言都認識的字符串 j_str = json.dumps(data) print(j_str) #pickle.dump 將數據通過特殊的形式轉換位只有python語言認識的字符串,並寫入文件 with open(D:/result.json,wb,encoding=utf8) as fp: json.dump(data,fp)

json vs pickle:

JSON:

優點:跨語言、體積小

缺點:只能支持int\str\list\tuple\dict

Pickle:

優點:專為python設計,支持python所有的數據類型

缺點:只能在python中使用,存儲數據占空間大

python之序列化