json,pickle,shelve模塊,xml處理模塊
阿新 • • 發佈:2019-02-06
如何 序列化 模塊 過程 pig close mon ons 特殊
常用模塊學習—序列化模塊詳解
-
什麽叫序列化?
- 序列化是指把內存裏的數據類型轉變成字符串,以使其能存儲到硬盤或通過網絡傳輸到遠程,因為硬盤或網絡傳輸時只能接受bytes。
-
為什麽要序列化?
- 你打遊戲過程中,打累了,停下來,關掉遊戲、想過2天再玩,2天之後,遊戲又從你上次停止的地方繼續運行,你上次遊戲的進度肯定保存在硬盤上了,是以何種形式呢?遊戲過程中產生的很多臨時數據是不規律的,可能在你關掉遊戲時正好有10個列表,3個嵌套字典的數據集合在內存裏,需要存下來?你如何存?把列表變成文件裏的多行多列形式?那嵌套字典呢?根本沒法存。所以,若是有種辦法可以直接把內存數據存到硬盤上,下次程序再啟動,再從硬盤上讀回來,還是原來的格式的話,那是極好的。
data = { ‘roles‘:[ {‘role‘:‘monster‘,‘type‘:‘pig‘,‘life‘:50}, {‘role‘:‘hero‘,‘type‘:‘關羽‘,‘life‘:80}, ] } #將數據寫入game_status文件 #f = open("game_status","w") #f.write(str(data)) #將數據從game_status文件讀出來 f = open("game_status","r") d = f.read() d = eval(d) print(d[‘roles‘]) #把內存數據轉成字符,叫序列化#把字符轉成內存數據,叫反序列化
-
用於序列化的兩個模塊:
-
-
json,用於字符串 和 python數據類型間進行轉換
-
pickle,用於python特有的類型 和 python的數據類型間進行轉換
-
常用模塊學習—序列化json模塊詳解
Json模塊提供了四個功能:
-
dumps(
將數據通過特殊的形式轉換為只有python語言認識的字符串
) -
dump(
將數據通過特殊的形式轉換為只有python語言認識的字符串,並寫入文件
) -
loads(
將數據通過特殊的形式轉換為所有程序語言都認識的字符串
) -
load(
將數據通過特殊的形式轉換為只有python語言認識的字符串,並寫入文件
import json #1、 data = { ‘roles‘:[ {‘role‘:‘monster‘,‘type‘:‘pig‘,‘life‘:50}, {‘role‘:‘hero‘,‘type‘:‘關羽‘,‘life‘:80}, ] } #d = json.dumps(data) #dumps裏存一個值 #print(d,type(d)) f = open("test.json","w") #json格式的文件,以json為拓展名 json.dump(data,f) #轉入字符並寫入文件。 #dump裏存兩個值 #2、 data = { ‘roles‘:[ {‘role‘:‘monster‘,‘type‘:‘pig‘,‘life‘:50}, {‘role‘:‘hero‘,‘type‘:‘關羽‘,‘life‘:80}, ] } d = json.dumps(data) #僅轉成字符串 d2 = json.loads(d) print(d2[‘roles‘]) #結果為:[{‘role‘: ‘monster‘, ‘type‘: ‘pig‘, ‘life‘: 50}, {‘role‘: ‘hero‘, ‘type‘: ‘關羽‘, ‘life‘: 80}] #3、從文件中加載回來 # data = { # ‘roles‘:[ # {‘role‘:‘monster‘,‘type‘:‘pig‘,‘life‘:50}, # {‘role‘:‘hero‘,‘type‘:‘關羽‘,‘life‘:80}, # ] # } f = open("test.json","r") data = json.load(f) print(data[‘roles‘]) #結果為:[{‘role‘: ‘monster‘, ‘type‘: ‘pig‘, ‘life‘: 50}, {‘role‘: ‘hero‘, ‘type‘: ‘關羽‘, ‘life‘: 80}] f.close() #只是把數據類型轉成字符串存到內存裏的意義? #json.dumps json.loads #1、把你的內存數據 通過網絡 共享給遠程其他人(硬盤或網絡傳輸時只能接受bytes ) #2、定義了不同編程語言之間的交互規則 #純文本 缺點:不能共享復雜的數據類型 #xml 缺點:占的空間大 #json 優點:簡單,占的空間小,可讀性好
json,pickle,shelve模塊,xml處理模塊