python之序列化
阿新 • • 發佈:2018-11-22
很多 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之序列化