1. 程式人生 > >Python3 從零單排9_json&pickle&shelve

Python3 從零單排9_json&pickle&shelve

pytho get color ron shel pick key div ict

  json&pickle&shelve:把內存裏的數據類型轉成字符串,才能夠存到硬盤,或者網絡傳輸

  json模塊 跨語言/體積小 只支持 int/str/list/list/tuple/dict

  1.可以存到內存 2.將字符串網絡傳輸給別人(網絡傳輸必須是bytes類型) 3.跨平臺/語言共享數據,定義了不同語言之間的交互規則

import json

data = {"a":123,"b":456} lis = [1,2,3,4,5,6,7] d1 = json.dumps(data) #將python數據類型轉換為字符串: print(d1,type(d1)) d2 = json.loads(d1) #
將字符串轉換為python數據類型 print(d2,type(d2)) f = open("test.list","w") #打開一個文件對象,寫模式 json.dump(lis,f) #將python數據類型直接以字符串形式存到文件裏 json.dump(lis,f,ensure_ascii=False)#將字典寫入文件為json格式,不需要用write,直接json.dump(dict_name,file_name,ensure_ascii=False)即可 # 註意ensure_ascii=False是必須要的,json.dump()默認的是ascii編碼,並不認識中文,需要關閉這個ascii編碼
f = open("test.list","r") #打開一個文件對象,讀模式 d3 = json.load(f) #直接將文件內容以python數據類型讀取 print(d3,type(d3))

  pickle模塊 專為python,支持所有python數據類型(set/float/函數/類都行) 但是只能在python裏用,且占體積小

import pickle


data = {"a":123,"b":456}
lis = [1,2,3,4,5,6,7]

f = open("data.pkl","wb")  #必須二進制打開
pickle.dump(data,f)  #存的也是bytes類型
f = open("data.pkl","rb") #必須是二進制打開 d4 = pickle.load(f) print(d4,type(d4)) d6 = pickle.dumps(data) print(d6,type(d6)) d7 = pickle.loads(d6) print(d7,type(d7))

  shelve模塊 解決需要序列化多種類型的python數據,以 k,v 形式存儲

import shelve


data = {"a":123,"b":456}
lis = [1,2,3,4,5,6,7]
f = shelve.open("shelve_test")
f["data"] = data
f["lis"] = lis
print(f.get("data"))
print(list(f.keys()))  #獲取所有key
print(list(f.values()))  #獲取所有 value
print(list(f.items()))  #獲取所有 k,v
f["key2"] = [1,2,"a"]  #創建一個新的kv
print(list(f.pop("data")))  #刪除一個kv
del f["data"]  #刪除一個kv
f.clear()  #清空所有內容
f.close()

Python3 從零單排9_json&pickle&shelve