1. 程式人生 > >json,pickle,shelve模塊,xml處理模塊

json,pickle,shelve模塊,xml處理模塊

如何 序列化 模塊 過程 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處理模塊