Python 輸出命令行進度條

在使用 pip 安裝時,你會發現有下載進度條,咱們也能夠藉助開源的第三方庫來實現這個功能,在項目輸出時增長一些可視化效果。

一個簡單易用的第三方庫是:progresspython

做者提供了動圖很直觀地展示了實現的全部輸出。git

 

這個庫實現了兩類樣式,一類是有終點的進度條樣式,另外一類是多用於加載的轉圈樣式。程序員

import time
from progress.bar import Bar

bar = Bar('Processing', max=100, fill='@', suffix='%(percent)d%%')
for i in range(100):
    time.sleep(0.1)
    bar.next()
bar.finish()

參數定義的功能:github

  • max: 進度條最大進度
  • fill:進度條填充的字符
  • suffix:百分比的樣式

運行上述代碼會獲得輸出編程

Processing |@@@@@@                          | 20%

同時也提供上下文的用法(須要用 Github 裏的源代碼):微信

with Bar('Processing', max=20) as bar:
    for i in range(20):
        # Do some work
        bar.next()

 

另外一類轉圈樣式,用法和Bar相似,只要沒達到終點就一直調用next方法便可app

from progress.spinner import Spinner

spinner = Spinner('Loading ')
while state != 'FINISHED':
    # Do some work
    spinner.next()

 

動圖裏的全部樣式都是做者已經實現的派生類,用法基本都同樣,固然也能夠繼承基礎類來本身實現更多的功能。url

class SlowBar(Bar):
    suffix = '%(remaining_hours)d hours remaining'
    @property
    def remaining_hours(self):
        return self.eta // 3600

上面介紹的庫,實現的功能很簡單,並且默認只能輸出到終端。spa

若是有更復雜的使用場景,推薦使用另外一個庫:python-progressbar.net

這個庫實現了更多功能,能夠自定義組合出一個進度條樣式,還能夠指定輸出流。

 

基本的使用很簡單,能夠直接傳入迭代對象。

import time
import progressbar

for i in progressbar.progressbar(range(100)):
    time.sleep(0.02)

輸出以下:

70% (70 of 100) |################       | Elapsed Time: 0:00:01 ETA:   0:00:00

 

也能夠生成對象後調用update方法 。

import time
import progressbar

bar = progressbar.ProgressBar(max_value=100)
for i in range(100):
    time.sleep(0.1)
    bar.update(i)

 

最有特色之處就是能夠自定義組件,好比咱們來實現相似於動圖中轉圈加載的樣式。

import time
import progressbar

widgets = [
    'Loading: ',
    '[', progressbar.AnimatedMarker(), ']',
    ' ',
    progressbar.Timer()
]
bar = progressbar.ProgressBar(
    widgets=widgets, max_value=progressbar.UnknownLength)

for i in range(100):
    time.sleep(0.5)
    bar.update(i)

輸出樣式是這樣的,方括號中的會一直旋轉

Loading: [\] Elapsed Time: 0:00:13

 

更多功能再也不贅述,能夠查看 Github 中的文檔

 

歡迎關注

微信公衆號:面向人生編程

編程思惟不該只存留在代碼之中,更應伴隨於整我的生旅途,這個公衆號不僅聊技術,還會聊產品/互聯網/經濟學等普遍話題,因此也歡迎非程序員關注。

相關文章
相關標籤/搜索