三行代码创建一个进度条,真香!
以前写代码的时候,希望在运行的时候多 print 出一些提示性信息,感觉满屏显示 debug 的信息特别炫酷,大家有没有跟我一样的感受?
但是渐渐从“菜鸟”变成“老狗”,堆代码的经验上去后,对这种炫酷的界面却有点反感起来了。
现在已经懒得从一堆 debug 信息中选取对自己有用的信息了。
以前跑代码,日志只用 debug 的信息都会存入,然而现在连 warning 都懒得看了。
我以前的代码风格
这是以前我写的爬 ppt 脚本的运行结果:
请求 url 得到 200 的响应码之后,会显示输出一次开始下载 XXX。
在 with open 实现存储之后,再显示输出一次XXX 下载结束!
一个文件爬取会输出两次信息,脚本运行之后也会有那种“炫酷”的感觉~
❝如果代码运行有错误,当然显示更多信息,会对排 bug 有更大的帮助,但是老是这么输出显示,就有点冗余了。
❞
「对于一些跑量的脚本,把提示信息,换成进度条就香了。」
代码重构
重构前,先介绍下今天要用到的库progress
。
安装
pip install progressbar2
❝py2 使用
❞pip install progressbar
安装。
使用
在progress
库中,只用到它的「三个实例方法」,就可实现一个进度条的动作:
start(max_value=None, init=True):Starts measuring time, and prints the bar at 0%。
update(value=None, force=False, **kwargs):Updates the ProgressBar to a new value。
finish(end='\n') :Puts the ProgressBar bar in the finished state
「start」 进度条初始化,给它一个目标上限值,例如到 100% 结束,max_value 参数给个 100 就 OK 了。
「update」 更新进度条进度,这个方法执行一次,进度条就会更新一次,value 参数就是要更新的值。
「finish」 关闭进度条,不想再对进度条进行操作,执行它。
代码实例
import time
import progressbar
p = progressbar.ProgressBar() # 实例化进度条
max_value = 100 # 满值100
p.start(max_value)
init_num = 0
n = 0
update_value = 1
while n < 100:
p.update(n) # 更新
n += update_value
time.sleep(0.1)
p.finish()
上面的代码,会执行 10 秒,每秒累加 10 次 1:
执行结果:
100% (100 of 100) |######################################################################################| Elapsed Time: 0:00:10 Time: 0:00:10
当然,这边显示的是已经运行完成的,实际效果这个进度条是动态增加的。
知道用法之后,把这个套路套进我原先的爬虫代码中:
(截取主要代码)
def run():
p = progressbar.ProgressBar()
links_num = len(get_detail_link(index_url))
p.start(links_num)
for num, link in enumerate(get_detail_link(index_url)):
download_document(link)
p.update(num)
p.finish()
if __name__ == '__main__':
run()
运行脚本后:
❝代码 finish 关闭进度条实例,达到 100% 后会自动退出。棒!我非常喜欢这样的方式显示。
❞
定制化进度条
如果你觉得这样的显示有点怪,那就定制化它:
修改 widget 参数,并传入progressbar.ProgressBar()
。
widgets = [ 'Progress Name :',' [', progressbar.Timer(), '] ',progressbar.Bar('+'), ' (', progressbar.ETA(), ') ']
p = progressbar.ProgressBar(widgets=widgets)
❝Bar('+') :调用进度条步进框,并以‘+’符号显示;
Timer() :已用时间;
ETA() :预计剩余时间;
Percentage() :进度百分比;
❞
搞定!
- EOF -
1、大厂都病了!
关注「程序员的那些事」加星标,不错过圈内事
点赞和在看就是最大的支持❤️
微信扫码关注该文公众号作者