如何在Python程式設計中實時顯示下載進度?

在用Python編寫批次任務、批次下載的專案中,當任務完成後需要輸出任務結果,比如下載的檔案數、任務名稱等。一般情況下是在任務全部完成後一次性輸出結果的,在此過程中會有很長一段時間沒有資訊輸出,處於靜默狀態,以致於可能被認為程式沒有正常執行,也無法得知當前執行到哪一步。

為了實時視覺化顯示任務的執行狀態,Python中可以使用文字進度條來實現。文字進度條跟圖形介面相比,以極低的資源消耗便可以實現類似的功能。可用的文字進度條有以下三個:

tqdm

progressbar

alive-progress

tqdm

GitHub專案:

tqdm/tqdm

使用以下命令安裝庫:

pip install tqdm

典型示例1

import timefrom tqdm import tqdmitems = range(100)for item in tqdm(items, ascii=True): # 轉為tqdm列表    # 執行任務 time。sleep(0。1)

支援unicode的系統環境可以輸出平滑實心的進度條。Windows控制檯通常只部分支援unicode,因此通常需要顯式地指出

ascii=True

。這是因為unicode字元寬度被錯誤顯示,或者某些unicode字元不能渲染。

大器曾經被這個問題困擾了大半個月,至此終於找到實質問題所在,在tqdm中提供引數

ascii=True

後問題得以完美解決。

典型示例2

import timefrom tqdm import tqdmitems = range(100)with tqdm(total=len(items), desc=‘任務1’, ascii=True) as bar:    for item in items:        # 執行任務        bar。update(1)        time。sleep(0。1)

這兩個示例的效果實際是差不多的,區別在於示例2中使用with語句,為tqdm提供了更多的引數,如果去掉

desc

引數,兩者輸出效果相同。

desc

引數可以為進度條新增字首文字,在輸出多個進度條時非常有必要,可以很直觀地顯示進度條的所屬任務。

如何在Python程式設計中實時顯示下載進度?

不指定

ascii=True

的效果如下圖所示:

如何在Python程式設計中實時顯示下載進度?

progressbar

GitHub專案:

WoLpH/python-progressbar

使用以下命令安裝庫:

pip install progressbar2

典型示例1

import timefrom progressbar import progressbaritems = range(100)for item in progressbar(items): # 執行任務 time。sleep(0。1)

典型示例2

import timefrom 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: # 執行任務 bar。update(item) time。sleep(0。1)

widgets中的當前數與總數之比可以用

Counter(format='%(value)d/%(max_value)d')

示例2中widgets的元素可以根據自己的需要進行新增或刪減。第一個元素的

progress1

相當於是進度條的字首文字,唯一遺憾的是,字首文字不能直接使用漢字,如需使用需要另外提供用到漢字的長度計算方法。有此需求的請移步GitHub,檢視專案的使用說明。

如何在Python程式設計中實時顯示下載進度?

alive-progress

GitHub專案:

rsalmei/alive-progress

使用以下命令安裝庫:

pip install alive-progress

典型示例

import timefrom alive_progress import alive_baritems = range(100)with alive_bar(len(items)) as bar: for item in items: # 執行任務 bar() time。sleep(0。1)

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

如何在Python程式設計中實時顯示下載進度?

如何在Python程式設計中實時顯示下載進度?

如何在Python程式設計中實時顯示下載進度?

我是大器,正在建立自己的知識庫,並將這些經驗分享給你,請關注我,一起交流學習。