Pythonのシーケンス化モジュールpickleとjson

8320 ワード

1シーケンス化の概念:
シーケンス化とは、メモリ内のデータをbytesタイプに変換し、ハードディスクに格納したり、ネットワークを介して転送したりできるようにすることです.
2シーケンス化された適用シーン:
簡単な例は、私たちがゲームをしている間に、急用があったら、一時停止したり、ゲームを閉じたりして、問題が解決してからゲームを続けます.これで遊び直す必要はありません.この場合、現在のゲームに関連するデータをハードディスクに格納し、次のゲームが始まるとハードディスクからこれらのデータを読み出す必要があります.
3 pickleモジュール
import pickle

dic = {
    "name":"zhangsan",
    "age":22
}
li = ["a",23,"asdf"]
d_dic = pickle.dumps(dic) # dumps         bytes  
print(d_dic)
print(type(d_dic))
#    
# b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00zhangsanq\x02X\x03\x00\x00\x00ageq\x03K\x16u.'
# 

print(pickle.loads(d_dic)) # loads              
#     {'name': 'zhangsan', 'age': 22}

# dump               
f = open("pic.pk","wb")
pickle.dump(dic,f)
pickle.dump(li,f)

#load          
f = open("pic.pk","rb")
d = pickle.load(f)
l = pickle.load(f)
print(d) #  {'name': 'zhangsan', 'age': 22}
print(l) # ['a', 23, 'asdf']
  :  dump   ,     load  ,       

4 jsonモジュール
import json

dic = {
    "name":"zhangsan",
    "age":22
}
li = ["a",23,"asdf"]

# json dump            
j_dic = json.dumps(dic)
print(type(j_dic)) # 
print(j_dic) # {"name": "zhangsan", "age": 22}

d = json.loads(j_dic)
print(type(d)) # 
print(d) # {"name": "zhangsan", "age": 22}

# dump               
f = open("js.json","w")
json.dump(dic,f)

f = open("js.json","r")
d = json.load(f)
print(d) # {'name': 'zhangsan', 'age': 22}
print(type(d)) # 

  :json  dump   ,      ,        ,dump  ,   load ,  dump         。        dump

5 pickleとjsonの違い
pickle:利点:Python独自で、Pythonのすべてのデータ型の欠点をサポートする:Pythonでしか使用できず、メモリの消費量が大きい
json:利点:マルチ言語をサポートし、異なるプログラミング言語間でjsonによるデータ交換が可能で、メモリを占有する小さな欠点:int/string/list/dictなどの一般的なデータ型しか格納できない