Python模組知識4:序列化Json/pickle,jsonpickle
序列化與還原序列化
序列化:把Python的基礎資料型別 (Elementary Data Type)轉為字串
還原序列化:把字串轉為Python的基礎資料型別 (Elementary Data Type)
Python中用於序列化的兩個模組:
json 用於【字串】和 【python基礎資料型別 (Elementary Data Type)】 間進行轉換;由於字串是各語言通用的,json更適合跨語言;但僅支援dict、list、tuple、str、int、flost、True、False
pickle 用於【python特有的類型】 和 【python基礎資料型別 (Elementary Data Type)】間進行轉換,支援任何類型,更適合所有類型的序列化,比如物件導向
Json模組提供了四個功能:dumps、dump、loads、load
pickle模組提供了四個功能:dumps、dump、loads、load
關於json:
案例1:json轉換過程,dumps、loads;內部涉及字串的時候一定要使用雙引號,如li=["a","b"],而不是li=['a','b']
import json
dic={"k1":"v1","k2":"v2"}
print('dic',dic,type(dic))
result=json.dumps(dic) # 將python基礎資料型別 (Elementary Data Type)轉為字串
print('result',result,type(result))
dic2=json.loads(result)#將字串轉為基礎資料型別 (Elementary Data Type) ,
print('dic2',dic2,type(dic2))
執行結果:
案例2:json讀取並寫入檔案中,dump、load
import json
li=["a","b"]
json.dump(li,open('db','w'))#執行結果,db檔案中寫入li的內容
r=json.load(open('db','r'))#讀檔案操作
print(r,type(r))
執行結果:
['a', 'b'] <class 'list'>
案例3:基於天氣的API擷取天氣相關的json
import requests
import json
r=requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京')
r.encoding='utf-8'
dic=json.loads(r.text)
print(dic)
執行結果:
關於pickle的應用:
案例4:pickle的dumps和loads
import pickle
dic={"k1":"v1","k2":"v2"}
print('dic',dic,type(dic))
result=pickle.dumps(dic) # 將python基礎資料型別 (Elementary Data Type)轉為位元組
print('result',result,type(result))
dic2=pickle.loads(result)#將字串轉為基礎資料型別 (Elementary Data Type)
print('dic2',dic2,type(dic2))
執行結果:
案例5-1:pickle的寫入檔案和匯出檔案,類型需要加b
import pickle
li=["a","b"]
pickle.dump(li,open('hh','wb'))#類型需要加b
r=pickle.load(open('hh','rb'))#讀檔案操作,需要加b
print(r,type(r))
執行結果:
案例5-2:修改匯入檔案的內容
import pickle
account_info={'a1':['hh',222,20],
'a2':['rr',444,40]
}
pickle.dump(account_info,open('acc.pkl','wb'))
t=pickle.load(open('acc.pkl','rb'))
print ('初次匯入',t,type(t))
#修改字典中的一個值,重新儲存,再次調用
account_info['a2'][1]=555
account_info['a2'][2]=50
pickle.dump(account_info,open('acc.pkl','wb'))
f=pickle.load(open('acc.pkl','rb'))
print ("修改值",f,type(f))
#添加一個新的欄位
account_info['a3']=['ppp',666,60]
pickle.dump(account_info,open('acc.pkl','wb'))
y=pickle.load(open('acc.pkl','rb'))
print ("添加新的值",y,type(y))
案例5-3:對象的pickle使用
案例5-4:jupyter上使用pickle
new_data.to_pickle('C:\\data_0921.pickle')
new_data = pd.read_pickle('C:\\data_0921.pickle')
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。