python序列化: json & pickle & shelve 模塊


一、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"])

 

  

 

 

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM