如何在Python編程中實時顯示下載進度?

在用Python編寫批量任務(wù)、批量下載的項目中,當(dāng)任務(wù)完成后需要輸出任務(wù)結(jié)果,比如下載的文件數(shù)、任務(wù)名稱等。一般情況下是在任務(wù)全部完成后一次性輸出結(jié)果的,在此過程中會有很長一段時間沒有信息輸出,處于靜默狀態(tài),以致于可能被認(rèn)為程序沒有正常運行,也無法得知當(dāng)前執(zhí)行到哪一步。

為了實時可視化顯示任務(wù)的運行狀態(tài),Python中可以使用文本進度條來實現(xiàn)。文本進度條跟圖形界面相比,以極低的資源消耗便可以實現(xiàn)類似的功能??捎玫奈谋具M度條有以下三個:tqdmprogressbar,alive-progress。

tqdm

GitHub項目地址:https://github.com/tqdm/tqdm

使用以下命令安裝庫:

pip install tqdm

典型示例1

import time
from tqdm import tqdm

items = range(100)
for item in tqdm(items, ascii=True): # 轉(zhuǎn)為tqdm列表
    # 執(zhí)行任務(wù)
    time.sleep(0.1)

支持unicode的系統(tǒng)環(huán)境可以輸出平滑實心的進度條。Windows控制臺通常只部分支持unicode,因此通常需要顯式地指出ascii=True。這是因為unicode字符寬度被錯誤顯示,或者某些unicode字符不能渲染。

大器曾經(jīng)被這個問題困擾了大半個月,至此終于找到實質(zhì)問題所在,在tqdm中提供參數(shù)ascii=True后問題得以完美解決。

典型示例2

import time
from tqdm import tqdm

items = range(100)
with tqdm(total=len(items), desc='任務(wù)1', ascii=True) as bar:
    for item in items:
        # 執(zhí)行任務(wù)
        bar.update(1)
        time.sleep(0.1)

這兩個示例的效果實際是差不多的,區(qū)別在于示例2中使用with語句,為tqdm提供了更多的參數(shù),如果去掉desc參數(shù),兩者輸出效果相同。desc參數(shù)可以為進度條添加前綴文字,在輸出多個進度條時非常有必要,可以很直觀地顯示進度條的所屬任務(wù)。

tqdm01.png

不指定ascii=True的效果如下圖所示:

tqdm02.png

progressbar

GitHub項目地址:https://github.com/WoLpH/python-progressbar

使用以下命令安裝庫:

pip install progressbar2

典型示例1

import time
from progressbar import progressbar

items = range(100)
for item in progressbar(items):
    # 執(zhí)行任務(wù)
    time.sleep(0.1)

典型示例2

import time
from progressbar import *

items = range(100)
widgets = ['progress1', ': ', Percentage(), ' ', Bar('#'), ' ', Timer(), ' ', ETA(), ' ', FileTransferSpeed()]
with ProgressBar(widgets=widgets, max_value=len(items)) as bar:
    for item in items:
        # 執(zhí)行任務(wù)
        bar.update(item)
        time.sleep(0.1)

widgets中的當(dāng)前數(shù)與總數(shù)之比可以用Counter(format='%(value)d/%(max_value)d')

示例2中widgets的元素可以根據(jù)自己的需要進行添加或刪減。第一個元素的progress1相當(dāng)于是進度條的前綴文字,唯一遺憾的是,前綴文字不能直接使用漢字,如需使用需要另外提供用到漢字的長度計算方法。有此需求的請移步GitHub,查看項目的使用說明。

tqdm03.png

alive-progress

GitHub項目地址:https://github.com/rsalmei/alive-progress

使用以下命令安裝庫:

pip install alive-progress

典型示例

import time
from alive_progress import alive_bar

items = range(100)
with alive_bar(len(items)) as bar:
    for item in items:
        # 執(zhí)行任務(wù)
        bar()
        time.sleep(0.1)

alive-progress的特色是有豐富的個性化的動態(tài)特效,雖然是比較簡單的特效,但看起來非常有趣。此進度條適合喜歡折騰的人使用,詳見GitHub項目使用說明,以下圖片展示了它的部分特性。

tqdm04.png
tqdm05.png
tqdm06.png

我是大器,正在建立自己的知識庫,并將這些經(jīng)驗分享給你,請關(guān)注我,一起交流學(xué)習(xí)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容