Redian新闻
>
三行代码创建一个进度条,真香!

三行代码创建一个进度条,真香!

公众号新闻

以前写代码的时候,希望在运行的时候多 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 -



推荐阅读  点击标题可跳转

0、极客专属:几十款程序员秒懂的卫衣

1、大厂都病了!

2、曾经对程序员最好的公司,倒下了

3、时隔 20 年,这个编程语言再次“称王”!


关注「程序员的那些事」加星标,不错过圈内事

点赞和在看就是最大的支持❤️

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
八校联动|“约法三章 情诉三行”三行情诗大赛启动!如何在 Linux 中找到一个进程 ID 并杀死它 | Linux 中国进度条!竟然是!假的!那要它有啥用天天喊腰不行了,99元买了个腰靠,真香!大范围雨雪已在路上!附重点城市雨雪进度条→NYU毕业去新加坡,我2年拿绿卡,真香!天花板的高度决定于组织度真香!一个轻量级的日志追踪框架,10 分钟即可接入!【霸王餐】视频来咯!新欧洲 X 楼兰之火,内有惊喜,真香!增程式,真香!ChatGPT代写简历,真香!微软杀疯了!几行代码创建私人定制ChatGPT,AI办公软件帝国来了Redis,真香!ChatGPT,真香!谷歌顶级AI人才组团叛逃OpenAI我,港大毕业生去新加坡,2年拿绿卡,真香!看这样的直播很享受——谈恋爱没有进度条,但是品牌种草可以有!又一条美食高铁开通!69min直达云南宝藏之城,热辣、好吃,真香!豪赚5W!居家做Python私活,真香!真香!新移民发誓自己不会被加拿大改变,一个月后竟...又get了一个进球新姿势别再用「沐浴露」了!!拯救冬季干燥起皮,还是得靠它,真香!!阿里的又一款数据高效同步工具DataX,真香!欧洲15船游+自由行-6 Valencia-瓦伦西亚教你在 Linux 上写一个进度条小程序毛泽东说错误常常是正确的先导首期大师思想领教营:创建一个人人保有自由和尊严的社会60行代码就能构建GPT!网友:比之前的教程都要清晰|附代码中国经济复苏进度条,9图速览→雪天遐思眼镜、化妆刷、牙刷,这个超声波清洗杯很大,还薅来了清!仓!价,真香!顶级Javaer都在使用的类库,真香!「霸王餐」视频来咯!新欧洲 X 楼兰之火,真香!内有惊喜!哇,网络周这些低价好物都值得冲!100刀入手了一个破壁机,真香!瞧不上 C++ 和 D 语言,国外程序员将 5.8 万行代码迁移到 Jai 语言,到底图什么?
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。