Python如何在控制台显示进度条
我們?cè)趯懸恍﹑ython程序時(shí),如果程序運(yùn)行時(shí)間較長(zhǎng),我們希望能夠有一個(gè)進(jìn)度條來動(dòng)態(tài)的展示程序運(yùn)行進(jìn)度。
首先能想到的做法是用print將執(zhí)行到第幾步打印出來,但這樣顯然不是我們想要的進(jìn)度條,顯示進(jìn)度占用了很多行,原因是print在末尾默認(rèn)加上了”\n”換行符。詳見《你應(yīng)該知道的print》。
我們對(duì)進(jìn)度條的需求:一是進(jìn)度信息在一行中顯示;二是每次都能夠動(dòng)態(tài)擦除一行中上一次的內(nèi)容。那么很自然的想到print有沒有相應(yīng)的轉(zhuǎn)義符,還真有這么一個(gè),”\r”。
import time N = 1000 for i in range(N):print("進(jìn)度:{0}%".format(round((i + 1) * 100 / N)), end="\r")time.sleep(0.01)輸出格式:
100%
進(jìn)度顯示的問題解決了,有時(shí)候我們需要有一些時(shí)間方面的顯示;例如已經(jīng)耗費(fèi)了多長(zhǎng)時(shí)間,預(yù)計(jì)還剩下多少時(shí)間等。
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)print("進(jìn)度:{0}%,已耗時(shí):{1}s,預(yù)計(jì)剩余時(shí)間:{2}s".format(p, duration, remaining), end="\r")time.sleep(0.01)輸出格式:進(jìn)度:100%,已耗時(shí):10s,預(yù)計(jì)剩余時(shí)間:10s
上面代碼中計(jì)算remaining時(shí)p加上了0.01,是為了避免除0問題。
至此,控制臺(tái)進(jìn)度條可以工作了,但代碼在不同地方使用時(shí)會(huì)比較冗余,理解了原理,可以封裝成一個(gè)庫。
實(shí)際上早就有人已經(jīng)做好這個(gè)工作了,而且功能更加強(qiáng)大豐富。這里推薦progressbar,下載地址為https://pypi.python.org/pypi/progressbar2
- 簡(jiǎn)單用法1
- 簡(jiǎn)單用法2
兩種簡(jiǎn)單用法的輸出格式都是:
100% (1000 of 1000) |#####################| Elapsed Time: 0:00:10 Time: 0:00:10
包含了百分百進(jìn)度,數(shù)量進(jìn)度,#號(hào)前進(jìn)條,耗費(fèi)時(shí)間,剩余時(shí)間。
- 高級(jí)點(diǎn)的用法(自己配置輸出格式)
輸出格式:
[Elapsed Time: 0:00:10] 100% (Time: 0:00:10)
主要方式有如下幾種,可自由搭配:
'Timer', # 計(jì)時(shí)器 'ETA', # 預(yù)計(jì)剩余時(shí)間 'AbsoluteETA', # 預(yù)計(jì)結(jié)束的絕對(duì)時(shí)間,耗時(shí)很長(zhǎng)時(shí)使用較方便 'Percentage', # 百分比進(jìn)度,30% 'SimpleProgress', # 計(jì)數(shù)進(jìn)度,300/1000 'Counter', # 單純計(jì)數(shù) 'Bar' # “#”號(hào)進(jìn)度條例如:
import time import progressbar bar = progressbar.ProgressBar(widgets=[progressbar.Percentage(),' (', progressbar.SimpleProgress(), ') ',' (', 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)
總結(jié)
以上是生活随笔為你收集整理的Python如何在控制台显示进度条的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matplotlib绘图蓝本
- 下一篇: Python的浅拷贝和深拷贝