Python3 從零單排9_json&pickle&shelve
阿新 • • 發佈:2018-12-05
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