网上查询progressbar的使用方法都是同一个套路,给出了官网上的代码示例,但是对于我这种基础薄弱的learner实在没看懂在具体的程序中到底怎么用,于是详细阅读官网介绍,汇总出此篇文章。
progressbar是一个用文本来显示程序运行进度的Python库。具体的显示格式通过各类widget(小部件)来控制。
pycharm中使用需要注意, sys.stdout or sys.stderr只能同时使用一个,否则会中断。
常用场景为:显示下载进度、显示任务的执行进度
类似功能的库:tqdm
进度条的显示可以通过\n,\r来实现
print输出一个\n(换行符),因此输出结束后游标就移动到了下一行行首,然后继续后续程序。
进度条必须在原地输出,不能换行。怎么实现呢?输出(sys.stdout.write()实现)完毕后将游标移动到行首,继续输出;新的更长的进度条把短的覆盖掉,就形成了动画效果。
转义符r可以把游标移动到行首而不换行;转义符n把游标移动到行首并且换行。
Python中输出stdout(标准输出)可以使用sys.stdout.write(具体理解可见链接)
# 示例
import time,sys
for i in range(100):
percent = i / 100
sys.stdout.write("\r{0}{1}".format("|"*i , '%.2f%%' % (percent * 100)))
sys.stdout.flush()
time.sleep(1)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
有了前面的基础,现在就搞明白怎么用progressbar这个lib了。
官网给了示范例子:
import time
import progressbar
p = progressbar.ProgressBar()
N = 1000
for i in p(range(N)):
time.sleep(0.01)
- 2
- 3
- 4
- 5
- 6
应用于for循环,
# 正常for循环
for i in range(N):
# 加上进度,就是将range(N)放到ProgressBar()中
for i in ProgressBar(range(N)):
- 1
- 2
- 3
- 4
import time
import progressbar
bar = progressbar.ProgressBar(widgets=[ ' [', progressbar.Timer(), '] ,progressbar.Percentage(),' (', progressbar.ETA(), ') ',])
for i in bar(range(1000)):
time.sleep(0.01)
- 1
- 2
- 3
- 4
- 5
就是在progressbar.ProgressBar()中增加一些参数。
‘Timer’, # 计时器
‘ETA’, # 预计剩余时间
‘AbsoluteETA’, # 预计结束的绝对时间,耗时很长时使用较方便
‘Percentage’, # 百分比进度,30%
‘SimpleProgress’, # 计数进度,300/1000
‘Counter’, # 单纯计数
‘Bar’ # “#”号进度条
回测策略,遍历参数较多时,不知道需要运行多久,通过添加进度条更好的把控。