小編給大家分享一下python爬取中json、pickle與shelve庫(kù)有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、做網(wǎng)站、邛崍網(wǎng)絡(luò)推廣、成都微信小程序、邛崍網(wǎng)絡(luò)營(yíng)銷、邛崍企業(yè)策劃、邛崍品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供邛崍建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com在使用Python進(jìn)行網(wǎng)絡(luò)編程或者爬取一些自己感興趣的東西時(shí),總避免不了進(jìn)行一些數(shù)據(jù)傳輸、存取等問(wèn)題,Python的文件對(duì)象以及其他擴(kuò)展庫(kù),已經(jīng)解決了很多關(guān)于文本和二進(jìn)制數(shù)據(jù)存取的問(wèn)題,比如網(wǎng)頁(yè)內(nèi)容、圖片&音視頻等多媒體內(nèi)容,但這些數(shù)據(jù)基本是最終的數(shù)據(jù)形態(tài)存儲(chǔ),有沒(méi)有辦法可以存儲(chǔ)Python本身的一些對(duì)象數(shù)據(jù),后續(xù)在使用的時(shí)候,再直接加載為Python對(duì)象即可,本文便講解下常用的Python對(duì)象數(shù)據(jù)存取、傳輸解決方案,即pickle、shelve、json。
內(nèi)容比較基礎(chǔ),也比較簡(jiǎn)單,但也是必須好好掌握的知識(shí)點(diǎn),因?yàn)槠錆撛诘膽?yīng)用場(chǎng)景太廣
pickle庫(kù)提供了一種將Python對(duì)象(所有對(duì)象)本地化存儲(chǔ)的解決方案,后續(xù)還可以從這些文件內(nèi)重新加載,加載后又是Python標(biāo)準(zhǔn)的對(duì)象數(shù)據(jù),可以用Python直接使用。
pickle有以下特點(diǎn):
可以存取所有類型Python對(duì)象,并本地化到一個(gè)文件內(nèi)
每個(gè)文件內(nèi)只能存儲(chǔ)一個(gè)Python對(duì)象
1.1 臨時(shí)轉(zhuǎn)換
可以將Python對(duì)象臨時(shí)轉(zhuǎn)化為pickle序列(存儲(chǔ)在變量?jī)?nèi)而不是文件內(nèi)),后續(xù)再進(jìn)行加載使用。
import pickle a=[1,2,3,4] #以下將a轉(zhuǎn)化為pickle序列 p_a=pickle.dumps(a) #以下將pickle序列轉(zhuǎn)化為Python對(duì)象 a=pickle.loads(p_a)
1.2 永久化存取
可以將Python對(duì)象存儲(chǔ)到本地文件內(nèi),方便下次取出繼續(xù)使用。
import pickle a=[1,2,3,4] f=open('file.pkl','wb') #以下將a轉(zhuǎn)化為pickle序列并存儲(chǔ)到本地文件 p_a=pickle.dump(a,f) f=open('file.pkl','rb') #以下將存儲(chǔ)在本地文件內(nèi)的pickle序列轉(zhuǎn)化為Python對(duì)象 a=pickle.load(f) f.close()
以上,首先打開(kāi)一個(gè)文件,注意,因?yàn)閜ickle序列是二進(jìn)制編碼格式,所以文件模式需要有'b'
然后將Python對(duì)象序列化并存儲(chǔ)到本地文件
后續(xù)可通過(guò)加載該文件,將里面存儲(chǔ)的數(shù)據(jù)重新加載為Python對(duì)象
shelve庫(kù)相當(dāng)于基于pickle的優(yōu)化,因?yàn)閜ickle單文件只能存儲(chǔ)單個(gè)Python對(duì)象,并且每次存取都需要使用dump和load,比較繁瑣,所以,該庫(kù)主要做了以下優(yōu)化:
創(chuàng)建了一個(gè)輕量級(jí)的鍵值對(duì)數(shù)據(jù)庫(kù),支持一個(gè)文件內(nèi)存儲(chǔ)多個(gè)Python對(duì)象
不需要每次都load,對(duì)Python數(shù)據(jù)的存取,變成了標(biāo)準(zhǔn)的字典訪問(wèn)
以下是演示代碼:
import shelve db=shelve.open('obj_db') class A:... a=[1,2,3];b=dict(name='dennis');c=A db['a']=a db['b']=b db['c']=c db['a'] db['b'] db['c'] db.close()
以上代碼,首先使用shelve的open方法創(chuàng)建一個(gè)db,可以指定db文件的存儲(chǔ)地址
然后便可以像使用字典一樣,用來(lái)在該鍵值對(duì)的db內(nèi)存儲(chǔ)Python對(duì)象(任何Python對(duì)象)
然后可像字典訪問(wèn)一樣,重新取出之前已經(jīng)存儲(chǔ)的對(duì)象,最后,別忘了戰(zhàn)術(shù)性關(guān)閉db
如果想遍歷或內(nèi)省某db內(nèi)存量鍵值,該db也有keys()和values()方法,也支持Python的迭代協(xié)議
所以,相較于pickle來(lái)說(shuō),會(huì)方便和強(qiáng)大很多
json是進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)傳輸應(yīng)用最為廣泛的數(shù)據(jù)格式,其可以將Python指定的一些數(shù)據(jù)對(duì)象轉(zhuǎn)化為json字符串,便于進(jìn)行存儲(chǔ)和網(wǎng)絡(luò)傳輸,并將該json序列化的字符串重新轉(zhuǎn)變?yōu)镻ython對(duì)象。
大體過(guò)程為Python→JSON→Python,所以可以進(jìn)行CS數(shù)據(jù)傳輸和通信。
以下為json和Python數(shù)據(jù)轉(zhuǎn)換映射表:
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true,false | Ture,False |
null | None |
3.1 臨時(shí)轉(zhuǎn)換
可以將Python對(duì)象臨時(shí)轉(zhuǎn)化為json字符串并賦值給某變量,待后續(xù)再對(duì)其轉(zhuǎn)化為Python對(duì)象
一般用于網(wǎng)絡(luò)傳輸,尤其是接口調(diào)用時(shí)數(shù)據(jù)傳輸。
import json mylist=[1,2,3] mydict={ 'name':dennis } #臨時(shí)轉(zhuǎn)換 a=json.dumps(mydict) b=json.dumps(mylist) #將json字符串重新轉(zhuǎn)為Python對(duì)象 mylist=json.loads(b) mydict=json.loads(a)
3.2 永久化存取
可以將Python對(duì)象轉(zhuǎn)換為json字符串并永久性存儲(chǔ)在本地文件內(nèi),便于后續(xù)重新加載使用。
import json mylist=[1,2,3] mydict={ 'name':dennis } #將Python對(duì)象轉(zhuǎn)化為json字符串,同時(shí)存儲(chǔ)到file內(nèi) with open('myjson.json','w') as f: json.dump(mydict,f) #將存儲(chǔ)在文件內(nèi)的json字符串加載并轉(zhuǎn)化為Python對(duì)象 with open('myjson.json','r') as f: json.load(f)
以上是“python爬取中json、pickle與shelve庫(kù)有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!