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