一、json & pickle & shelve 模塊
json,用於字符串 和 python數據類型間進行轉換
pickle,用於python特有的類型 和 python的數據類型間進行轉換
Json模塊提供了四個功能:dumps、dump、loads、load
pickle模塊提供了四個功能:dumps、dump、loads、load
json模塊:
JSON表示的對象就是標准的JavaScript語言的對象,JSON和Python內置的數據類型對應如下:
下面通過一些示例來學習:
首先我們來看json的dumps和loads方法
s1={"k1":"v1"}
st=json.dumps(s1)
print(st,type(st))
s='{"k1":"v1"}'
dic=json.loads(s)
print(dic,type(dic))
輸出結果為:
{"k1": "v1"} <class 'str'>
{'k1': 'v1'} <class 'dict'>
可以看出json的dumps方法處理數據時會將數據轉換為字符類型,loads則會重新還原它的類型。
再來看json的dump和load方法,通過示例來了解:
li=[11,22,33]
li=json.dump(li,open('db','w'))
li=json.load(open('db','r'))
print(li,type(li))
Json模塊dumps、loads、load、dump的區別:
load,dump可加載外部文件,處理文件的數據,dumps,loads主要處理內存中的數據
pickle模塊:
下面我們來看pickle的dumps和loads方法,通過示例我們來了解:
import pickle
i=[11,22,33]
r=pickle.dumps(li)
print(r)
result=pickle.loads(r)
print(result)
結果為:
b'\x80\x03]q\x00(K\x0bK\x16K!e.'
[11, 22, 33]
pickle的dupms方法會將數據存為pickle特有的數據類型
再看pickle的dump和load方法,通過示例我們來了解:
import pickle
i=[11,22,33]
pickle.dump(i,open('db','wb'))
result=pickle.load(open('db','rb'))
print(result)
需要注意的是dump文件或者load文件是需要使用二進制。
shelve模塊
shelve是一額簡單的數據存儲方案,他只有一個函數就是open(),這個函數接收一個參數就是文件名,然后返回一個shelf對象,你可以用他來存儲東西,就可以簡單的把他當作一個字典,當你存儲完畢的時候,就調用close函數來關閉。
還是來通過示例來了解:
f = shelve.open('user.db','wc')
f['baidu'] = 'www.baidu.com'
f['qq'] = 'www.qq.com'
f['360'] = 'www.360.cn'
f.close()
f = shelve.open('user.db','a+')
print(f['baidu'],f['qq'],f['360'])
結果為:
www.baidu.com
www.qq.com
www.360.cn
對shelve序列化數據進行更新操作,通過示例來進行學習:
f=shelve.open('user_db','c') f["user"]={"數碼電器": {"打印機": "3600", "手機": "3800", "電腦": "8000", "照相機": "10000"}, "服裝百貨": {"方便面": "4", "夾克": "300", "牛仔褲": "288", "王老吉": "6"}, "化妝品": {"韓束": "388", "歐詩漫": "666", "歐萊雅": "888", "百雀羚": "259"}, "汽車":{"帕沙特": "250000", "奇瑞": "100000", "特斯拉": "999999", "寶馬X5": "550000"} } a=(f["user"]) a.update({"食品":{"豬肉":"12","牛肉":"28","雞肉":"8","羊肉":"32",}}) f["user"]=a f.close() f=shelve.open('user_db','a') print(f["user"])