Python 控制台顯示進度條

2021-10-12 01:53:56 字數 2354 閱讀 7554

我們在寫一些python程式時,如果程式執行時間較長,我們希望能夠有乙個進度條來動態的展示程式執行進度。

首先能想到的做法是用print將執行到第幾步列印出來,但這樣顯然不是我們想要的進度條,顯示進度占用了很多行,原因是print在末尾預設加上了」\n」換行符。詳見《你應該知道的print》。

import time

n = 1000

for i in range(n):

print("進度:%".format(round((i + 1) * 100 / n)), end="\r")

time.sleep(0.01)

輸出格式:

100%

進度顯示的問題解決了,有時候我們需要有一些時間方面的顯示;例如已經耗費了多長時間,預計還剩下多少時間等。

import time

n = 1000

st = time.clock()

for i in range(n):

p = round((i + 1) * 100 / n)

duration = round(time.clock() - st, 2)

remaining = round(duration * 100 / (0.01 + p) - duration, 2)

time.sleep(0.01)

上面**中計算remaining時p加上了0.01,是為了避免除0問題。

至此,控制台進度條可以工作了,但**在不同地方使用時會比較冗餘,理解了原理,可以封裝成乙個庫。

import time

import progressbar

p = progressbar.progressbar()

n = 1000

for i in p(range(n)):

time.sleep(0.01)

import time

import progressbar

p = progressbar.progressbar()

n = 1000

p.start(n)

for i in range(n):

time.sleep(0.01)

p.update(i+1)

p.finish()

兩種簡單用法的輸出格式都是:

100% (1000 of 1000) |#####################| elapsed time: 0:00:10 time: 0:00:10

包含了百分百進度,數量進度,#號前進條,耗費時間,剩餘時間。

import time

import progressbar

bar = progressbar.progressbar(widgets=[

' [', progressbar.timer(), '] ',

progressbar.percentage(),

' (', progressbar.eta(), ') ',

])for i in bar(range(1000)):

time.sleep(0.01)

輸出格式:

[elapsed time: 0:00:10] 100% (time: 0:00:10)

主要方式有如下幾種,可自由搭配:

'timer',          # 計時器

'eta', # 預計剩餘時間

'absoluteeta', # 預計結束的絕對時間,耗時很長時使用較方便

'percentage', # 百分比進度,30%

'******progress', # 計數進度,300/1000

'counter', # 單純計數

'bar' # 「#」號進度條

例如:

import time

import progressbar

bar = progressbar.progressbar(widgets=[

progressbar.percentage(),

' (', progressbar.******progress(), ') ',

' (', progressbar.absoluteeta(), ') ',])

for i in bar(range(1000)):

time.sleep(0.01)

輸出示例:

54% ( 545 of 1000) (estimated finish time: 2016-11-06 19:26:15)

golang控制台顯示進度條

x 總量 x 當前進度 x 耗時 通過以上元素可以延伸出 完成百分比 速度 預計剩餘時間 根據設定速度快慢閾值用不同的顏色來顯示進度條。進度條 type bar struct 耗時 乙個計時器,需要注意的是即使進度沒有變化,耗時也是遞增的,看過乙個多程序進度條的寫法,沒有注意這塊,乙個gorouti...

實現控制台進度條

此類功能在linux的控制台軟體中是很常見的,windows下沒有什麼印象。因為wget是c語言在linux上實現的,我首先考慮到的是不是有相關介面,於是就找來那本名著 uinx環境程式設計 查閱後並未發現相關api。有同事認為stdout也是檔案,應該看看檔案io章。於是就仔細學習了那章,複習和鞏...

Python 控制台進度條的實現

進行爬蟲等耗時的任務時,有時會想在控制台輸出進度條,以顯示當前任務進度。這裡總結了兩種方法。方法1 使用tqdm模組 示例 from time import sleep from tqdm import tqdm for i in tqdm range 1000 sleep 0.005 顯示效果 方...