欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬取之json、pickle與shelve庫的深入講解

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

前言

在使用Python進行網(wǎng)絡(luò)編程或者爬取一些自己感興趣的東西時,總避免不了進行一些數(shù)據(jù)傳輸、存取等問題,Python的文件對象以及其他擴展庫,已經(jīng)解決了很多關(guān)于文本和二進制數(shù)據(jù)存取的問題,比如網(wǎng)頁內(nèi)容、圖片&音視頻等多媒體內(nèi)容,但這些數(shù)據(jù)基本是最終的數(shù)據(jù)形態(tài)存儲,有沒有辦法可以存儲Python本身的一些對象數(shù)據(jù),后續(xù)在使用的時候,再直接加載為Python對象即可,本文便講解下常用的Python對象數(shù)據(jù)存取、傳輸解決方案,即pickle、shelve、json。

內(nèi)容比較基礎(chǔ),也比較簡單,但也是必須好好掌握的知識點,因為其潛在的應(yīng)用場景太廣

一、pickle

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

pickle有以下特點:

  1. 可以存取所有類型Python對象,并本地化到一個文件內(nèi)
  2. 每個文件內(nèi)只能存儲一個Python對象

1.1 臨時轉(zhuǎn)換

可以將Python對象臨時轉(zhuǎn)化為pickle序列(存儲在變量內(nèi)而不是文件內(nèi)),后續(xù)再進行加載使用。

import pickle
a=[1,2,3,4]
#以下將a轉(zhuǎn)化為pickle序列
p_a=pickle.dumps(a)
 
#以下將pickle序列轉(zhuǎn)化為Python對象
a=pickle.loads(p_a)

1.2 永久化存取

可以將Python對象存儲到本地文件內(nèi),方便下次取出繼續(xù)使用。

import pickle
a=[1,2,3,4]
f=open('file.pkl','wb')
 
#以下將a轉(zhuǎn)化為pickle序列并存儲到本地文件
p_a=pickle.dump(a,f)
 
f=open('file.pkl','rb')
#以下將存儲在本地文件內(nèi)的pickle序列轉(zhuǎn)化為Python對象
a=pickle.load(f)
 
f.close()

以上,首先打開一個文件,注意,因為pickle序列是二進制編碼格式,所以文件模式需要有'b'

然后將Python對象序列化并存儲到本地文件

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

二、shelve

shelve庫相當于基于pickle的優(yōu)化,因為pickle單文件只能存儲單個Python對象,并且每次存取都需要使用dump和load,比較繁瑣,所以,該庫主要做了以下優(yōu)化:

  1. 創(chuàng)建了一個輕量級的鍵值對數(shù)據(jù)庫,支持一個文件內(nèi)存儲多個Python對象
  2. 不需要每次都load,對Python數(shù)據(jù)的存取,變成了標準的字典訪問

以下是演示代碼:

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)建一個db,可以指定db文件的存儲地址

然后便可以像使用字典一樣,用來在該鍵值對的db內(nèi)存儲Python對象(任何Python對象)

然后可像字典訪問一樣,重新取出之前已經(jīng)存儲的對象,最后,別忘了戰(zhàn)術(shù)性關(guān)閉db

如果想遍歷或內(nèi)省某db內(nèi)存量鍵值,該db也有keys()和values()方法,也支持Python的迭代協(xié)議

所以,相較于pickle來說,會方便和強大很多

三、json

json是進行網(wǎng)絡(luò)數(shù)據(jù)傳輸應(yīng)用最為廣泛的數(shù)據(jù)格式,其可以將Python指定的一些數(shù)據(jù)對象轉(zhuǎn)化為json字符串,便于進行存儲和網(wǎng)絡(luò)傳輸,并將該json序列化的字符串重新轉(zhuǎn)變?yōu)镻ython對象。

大體過程為Python→JSON→Python,所以可以進行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 臨時轉(zhuǎn)換

可以將Python對象臨時轉(zhuǎn)化為json字符串并賦值給某變量,待后續(xù)再對其轉(zhuǎn)化為Python對象

一般用于網(wǎng)絡(luò)傳輸,尤其是接口調(diào)用時數(shù)據(jù)傳輸。

import json
mylist=[1,2,3]
mydict={
 'name':dennis
}
#臨時轉(zhuǎn)換
a=json.dumps(mydict)
b=json.dumps(mylist)
#將json字符串重新轉(zhuǎn)為Python對象
mylist=json.loads(b)
mydict=json.loads(a)

3.2 永久化存取

可以將Python對象轉(zhuǎn)換為json字符串并永久性存儲在本地文件內(nèi),便于后續(xù)重新加載使用。

import json
mylist=[1,2,3]
mydict={
 'name':dennis
}
 
#將Python對象轉(zhuǎn)化為json字符串,同時存儲到file內(nèi)
with open('myjson.json','w') as f:
 json.dump(mydict,f)
 
#將存儲在文件內(nèi)的json字符串加載并轉(zhuǎn)化為Python對象
with open('myjson.json','r') as f:
 json.load(f)

總結(jié)

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

相關(guān)文章

  • python實現(xiàn)猜數(shù)游戲(保存游戲記錄)

    python實現(xiàn)猜數(shù)游戲(保存游戲記錄)

    這篇文章主要為大家詳細介紹了python實現(xiàn)猜數(shù)游戲,保存游戲記錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 利用Python如何實時檢測自身內(nèi)存占用

    利用Python如何實時檢測自身內(nèi)存占用

    這篇文章主要介紹了利用Python如何實時檢測自身內(nèi)存占用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-05-05
  • 離線安裝Pyecharts的步驟以及依賴包流程

    離線安裝Pyecharts的步驟以及依賴包流程

    這篇文章主要介紹了離線安裝Pyecharts的步驟以及依賴包流程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-03-03
  • django 基于中間件實現(xiàn)限制ip頻繁訪問過程詳解

    django 基于中間件實現(xiàn)限制ip頻繁訪問過程詳解

    這篇文章主要介紹了django 基于中間件實現(xiàn)限制ip頻繁訪問過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python標準庫sched模塊使用指南

    Python標準庫sched模塊使用指南

    這篇文章主要介紹了Python標準庫sched模塊使用的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 基于python實現(xiàn)的百度新歌榜、熱歌榜下載器(附代碼)

    基于python實現(xiàn)的百度新歌榜、熱歌榜下載器(附代碼)

    這篇文章主要介紹了基于python實現(xiàn)的百度新歌榜、熱歌榜下載器(附代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python?標準庫?fileinput與文件迭代器

    Python?標準庫?fileinput與文件迭代器

    這篇文章主要介紹了Python標準庫fileinput與文件迭代器,fileinput模塊可以對一個或多個文件中的內(nèi)容進行迭代、遍歷等操作,更多詳細內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • 十個Python經(jīng)典小游戲的代碼合集

    十個Python經(jīng)典小游戲的代碼合集

    這篇文章主要為大家分享十個Python經(jīng)典的小游戲代碼,非常適合Python初學者練手。文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2022-05-05
  • Python中常見的導入方式總結(jié)

    Python中常見的導入方式總結(jié)

    這篇文章主要介紹了Python中常見的導入方式總結(jié),文中有非常詳細的代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Python使用gensim計算文檔相似性

    Python使用gensim計算文檔相似性

    在文本處理中,比如商品評論挖掘,有時需要了解每個評論分別和商品的描述之間的相似度,以此衡量評論的客觀性。那么python 里面有計算文本相似度的程序包嗎,恭喜你,不僅有,而且很好很強大。下面我們就來體驗下gensim的強大
    2016-04-04

最新評論