最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬取之json、pickle與shelve庫(kù)的深入講解

 更新時(shí)間:2021年03月08日 14:13:05   作者:一秋閑談  
這篇文章主要給大家介紹了關(guān)于python爬取之json、pickle與shelve庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

在使用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ǔ),有沒有辦法可以存儲(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

pickle庫(kù)提供了一種將Python對(duì)象(所有對(duì)象)本地化存儲(chǔ)的解決方案,后續(xù)還可以從這些文件內(nèi)重新加載,加載后又是Python標(biāo)準(zhǔn)的對(duì)象數(shù)據(jù),可以用Python直接使用。

pickle有以下特點(diǎn):

  1. 可以存取所有類型Python對(duì)象,并本地化到一個(gè)文件內(nèi)
  2. 每個(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()

以上,首先打開一個(gè)文件,注意,因?yàn)閜ickle序列是二進(jìn)制編碼格式,所以文件模式需要有'b'

然后將Python對(duì)象序列化并存儲(chǔ)到本地文件

后續(xù)可通過(guò)加載該文件,將里面存儲(chǔ)的數(shù)據(jù)重新加載為Python對(duì)象

二、shelve

shelve庫(kù)相當(dāng)于基于pickle的優(yōu)化,因?yàn)閜ickle單文件只能存儲(chǔ)單個(gè)Python對(duì)象,并且每次存取都需要使用dump和load,比較繁瑣,所以,該庫(kù)主要做了以下優(yōu)化:

  1. 創(chuàng)建了一個(gè)輕量級(jí)的鍵值對(duì)數(shù)據(jù)庫(kù),支持一個(gè)文件內(nèi)存儲(chǔ)多個(gè)Python對(duì)象
  2. 不需要每次都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

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)

總結(jié)

到此這篇關(guān)于python爬取之json、pickle與shelve庫(kù)的文章就介紹到這了,更多相關(guān)python json、pickle與shelve庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用jupyter notebook運(yùn)行python和R的步驟

    使用jupyter notebook運(yùn)行python和R的步驟

    這篇文章主要介紹了使用jupyter notebook運(yùn)行python和R的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • pytorch模型轉(zhuǎn)onnx模型的方法詳解

    pytorch模型轉(zhuǎn)onnx模型的方法詳解

    很多時(shí)候有pytorch模型轉(zhuǎn)onnx模型的必要,比如用tensorRT加速的時(shí)候,下面這篇文章主要給大家介紹了關(guān)于pytorch模型轉(zhuǎn)onnx模型的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • python尋找list中最大值、最小值并返回其所在位置的方法

    python尋找list中最大值、最小值并返回其所在位置的方法

    今天小編就為大家分享一篇python尋找list中最大值、最小值并返回其所在位置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • django model的update時(shí)auto_now不被更新的原因及解決方式

    django model的update時(shí)auto_now不被更新的原因及解決方式

    這篇文章主要介紹了django model的update時(shí)auto_now不被更新的原因及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 淺談django的render函數(shù)的參數(shù)問(wèn)題

    淺談django的render函數(shù)的參數(shù)問(wèn)題

    今天小編就為大家分享一篇淺談django的render函數(shù)的參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python3爬蟲學(xué)習(xí)之MySQL數(shù)據(jù)庫(kù)存儲(chǔ)爬取的信息詳解

    Python3爬蟲學(xué)習(xí)之MySQL數(shù)據(jù)庫(kù)存儲(chǔ)爬取的信息詳解

    這篇文章主要介紹了Python3爬蟲學(xué)習(xí)之MySQL數(shù)據(jù)庫(kù)存儲(chǔ)爬取的信息,涉及Python3針對(duì)mysql數(shù)據(jù)庫(kù)的連接、信息存儲(chǔ)等相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • python閉包與引用以及需要注意的陷阱

    python閉包與引用以及需要注意的陷阱

    這篇文章主要介紹了python閉包與引用以及需要注意的陷阱,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • 利用django如何解析用戶上傳的excel文件

    利用django如何解析用戶上傳的excel文件

    這篇文章主要給大家介紹了關(guān)于利用django如何解析用戶上傳的excel文件的相關(guān)資料,這是最近在工作中遇到的一個(gè)問(wèn)題,覺著有必要分享出給大家,需要的朋友可以參考借鑒,下面來(lái)一起看看詳細(xì)的介紹吧。
    2017-07-07
  • 深入了解Python中反射和動(dòng)態(tài)屬性的無(wú)限可能

    深入了解Python中反射和動(dòng)態(tài)屬性的無(wú)限可能

    理解 Python 中的反射和動(dòng)態(tài)屬性是編寫靈活和強(qiáng)大程序的關(guān)鍵,在這篇文章中,小編將帶領(lǐng)大家一起反射和動(dòng)態(tài)屬性的概念,并提供大量示例代碼,希望對(duì)大家有所幫助
    2023-11-11
  • 在Django的通用視圖中處理Context的方法

    在Django的通用視圖中處理Context的方法

    這篇文章主要介紹了在Django的通用視圖中處理Context的方法,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

开封县| 天门市| 和平县| 西林县| 乐业县| 葵青区| 大城县| 新邵县| 镇赉县| 山东| 保亭| 龙胜| 吴堡县| 海门市| 揭西县| 泉州市| 林芝县| 南投市| 奉新县| 塔城市| 扶沟县| 芜湖县| 正镶白旗| 镇宁| 张家港市| 靖州| 凉城县| 铅山县| 若羌县| 遵义市| 肥东县| 兴仁县| 寿宁县| 久治县| 澄城县| 贵定县| 亚东县| 沙河市| 贡觉县| 陇南市| 南雄市|