Python模組知識4:序列化Json/pickle,jsonpickle

來源:互聯網
上載者:User

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:

  • JSON:JavaScript 物件標記法(JavaScript Object Notation)。

  • JSON 是儲存和交換文本資訊的文法。類似 XML。

  • JSON 比 XML 更小、更快,更易解析


案例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')


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.