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

Python如何使用Requests下載文件并且顯示進(jìn)度條

 更新時(shí)間:2024年12月17日 09:35:45   作者:LLLibra146  
這篇文章主要為大家詳細(xì)介紹了如何使用?Requests?下載文件并且顯示進(jìn)度條,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

引言

本篇文章來分享一下如何使用 Requests 下載文件并且顯示進(jìn)度條。

下載文件

說到下載文件,大家可能一下子就能寫出以下的代碼:

import requests

total = 10485
url = f'https://speed.cloudflare.com/__down?during=download&bytes={total}'
# 上面的 URL 是 cloudflare 的測(cè)試鏈接,可以傳入想要下載的長(zhǎng)度
res = requests.get(url)

with open('test.file', 'wb') as file:
    file.write(res.content)
print('下載完成')

這樣寫當(dāng)然沒問題,但是有幾個(gè)問題:

  • 文件內(nèi)容都放到了內(nèi)存中,并且沒有下載進(jìn)度
  • 如果文件很大,不光下載時(shí)間很久,而且占用很大內(nèi)存無法釋放,只有下載完成后才能釋放
  • 沒有下載進(jìn)度,不知道下載是否還在進(jìn)行中,不知道何時(shí)結(jié)束,不知道下載的狀態(tài)

Requests 分塊下載

為了解決上面的問題,我們需要用到流式傳輸,在使用 Requests 進(jìn)行下載時(shí),只需要將 stream 設(shè)置 True,即可開啟流式傳輸,Requests 不會(huì)從服務(wù)器一次性將內(nèi)容全部下載到本地,而是根據(jù)需求分塊的從服務(wù)器獲取內(nèi)容,然后對(duì)內(nèi)容進(jìn)行處理。

舉個(gè)例子:

import json
import requests

r = requests.get('https://httpbin.org/stream/20', stream=True)

for line in r.iter_lines():

    # filter out keep-alive new lines
    if line:
        decoded_line = line.decode('utf-8')
        print(json.loads(decoded_line))

給下載加上進(jìn)度條

為了解決下載的時(shí)候沒有進(jìn)度像是卡住的問題,可以在下載的時(shí)候加上進(jìn)度條, 并且分塊進(jìn)行下載,而不是將數(shù)據(jù)全部放到內(nèi)存中,防止占用過大的內(nèi)存。

進(jìn)度條我們使用tqdm 庫,tqdm 庫是一個(gè)功能強(qiáng)大且極具實(shí)用性的 Python 進(jìn)度條工具,它能夠以直觀的可視化進(jìn)度條形式清晰展示循環(huán)迭代、文件處理等各類任務(wù)的執(zhí)行進(jìn)度,極大提升程序運(yùn)行狀態(tài)的可視性與用戶體驗(yàn),廣泛應(yīng)用于數(shù)據(jù)處理、機(jī)器學(xué)習(xí)訓(xùn)練等眾多領(lǐng)域,方便開發(fā)者與使用者實(shí)時(shí)掌握任務(wù)進(jìn)展情況并有效優(yōu)化程序運(yùn)行流程。

先安裝:

poetry add tqdm
# 或者
pip install tqdm

安裝好后,對(duì)之前的下載代碼進(jìn)行優(yōu)化,并且使用流式傳輸方法改造一下:

import requests
from tqdm import tqdm

total = 104857600  # 100M
url = f'https://speed.cloudflare.com/__down?during=download&bytes={total}'
res = requests.get(url, stream=True)
# 上面的 URL 是 cloudflare 的測(cè)試鏈接,可以傳入想要下載的長(zhǎng)度,如果是正常的下載文件,需要通過下面的代碼來獲取總長(zhǎng)度
# file_size = int(response.headers.get("Content - Length", 0))
print(total)
with open('test.file', 'wb') as file, tqdm(
        desc='test.file',
        total=total,
        unit='iB',
        unit_scale=True,
        unit_divisor=1024,
) as bar:
    for data in res.iter_content(chunk_size=1024):
        size = file.write(data)
        bar.update(size)

下載效果:

可以看到,不光有了進(jìn)度條,還有了下載速度,而且還有總大小和已經(jīng)下載的大小和預(yù)估時(shí)間,信息是相當(dāng)全面了。

總結(jié)

上面的方法在下載大文件時(shí)非常有用,不僅可以清楚地看到下載的進(jìn)度,還能避免一次性將整個(gè)文件讀取到內(nèi)存中,從而節(jié)省內(nèi)存資源,提高程序的穩(wěn)定性和效率。

到此這篇關(guān)于Python如何使用Requests下載文件并且顯示進(jìn)度條的文章就介紹到這了,更多相關(guān)Python Requests下載文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python和pygame繪制繁花曲線的方法

    使用python和pygame繪制繁花曲線的方法

    本篇文章主要介紹了使用python和pygame繪制繁花曲線的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • 深入解析Python中BeautifulSoup4的基礎(chǔ)知識(shí)與實(shí)戰(zhàn)應(yīng)用

    深入解析Python中BeautifulSoup4的基礎(chǔ)知識(shí)與實(shí)戰(zhàn)應(yīng)用

    BeautifulSoup4正是一款功能強(qiáng)大的解析器,能夠輕松解析HTML和XML文檔,本文將介紹BeautifulSoup4的基礎(chǔ)知識(shí),并通過實(shí)際代碼示例進(jìn)行演示,感興趣的可以了解下
    2024-02-02
  • python django 訪問靜態(tài)文件出現(xiàn)404或500錯(cuò)誤

    python django 訪問靜態(tài)文件出現(xiàn)404或500錯(cuò)誤

    這篇文章主要介紹了python django 訪問靜態(tài)文件出現(xiàn)404或500錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 解決python web項(xiàng)目意外關(guān)閉,但占用端口的問題

    解決python web項(xiàng)目意外關(guān)閉,但占用端口的問題

    今天小編就為大家分享一篇解決python web項(xiàng)目意外關(guān)閉,但占用端口的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 分享2個(gè)方便調(diào)試Python代碼的實(shí)用工具

    分享2個(gè)方便調(diào)試Python代碼的實(shí)用工具

    這篇文章主要介紹了分享方便調(diào)試Python代碼的2個(gè)實(shí)用工具,可以方便展示我們調(diào)試代碼的中間狀態(tài),提升大家的編碼效率,詳細(xì)的介紹需要的小伙伴可以參考一下下面文章內(nèi)容
    2022-05-05
  • Python的加密模塊之hashlib 與 base64詳解及常用加密方法

    Python的加密模塊之hashlib 與 base64詳解及常用加密方法

    我們來學(xué)習(xí)一下 Python 中的加密模塊,加密模塊在工作中被廣泛應(yīng)用,比如數(shù)據(jù)的傳入 不希望被捕獲,通過把數(shù)據(jù)加密。這樣即使被捕獲也無法獲取到數(shù)據(jù)的真實(shí)信息,今天我們就來學(xué)習(xí)一下關(guān)于加密的方法,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • 基于Pytorch SSD模型分析

    基于Pytorch SSD模型分析

    今天小編就為大家分享一篇基于Pytorch SSD模型分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python利用魔法方法玩轉(zhuǎn)對(duì)象

    Python利用魔法方法玩轉(zhuǎn)對(duì)象

    Python中魔法方法(magic method)其實(shí)就是那些被雙下劃線包圍的方法,這些魔法方法為類添加了**“魔力”,讓我們可以在面向?qū)ο缶幊讨杏酶雍?jiǎn)潔的代碼來操作對(duì)象,下面我們就來具體了解一下如何利用魔法方法玩轉(zhuǎn)對(duì)象吧
    2023-12-12
  • Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    本文主要介紹了Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python實(shí)現(xiàn)兩個(gè)字典合并,兩個(gè)list合并

    python實(shí)現(xiàn)兩個(gè)字典合并,兩個(gè)list合并

    今天小編就為大家分享一篇python實(shí)現(xiàn)兩個(gè)字典合并,兩個(gè)list合并,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評(píng)論