给Python代码加上酷炫进度条的几种姿势

news/2024/7/1 2:42:07

作者 | 刘早起

来源 | 早起Python(ID: zaoqi-python)

大家好,在下载某些文件的时候你一定会不时盯着进度条,在写代码的时候使用进度条可以便捷的观察任务处理情况,除了使用print来打印之外,今天本文就介绍几种给你的Python代码加上酷炫的进度条的方式。

自定义ProgressBar

最原始的办法就是不借助任何第三方工具,自己写一个进度条函数,使用time模块配合sys模块即可

import sys
import timedef progressbar(it, prefix="", size=60, file=sys.stdout):count = len(it)def show(j):x = int(size*j/count)file.write("%s[%s%s] %i/%i\r" % (prefix, "#"*x, "."*(size-x), j, count))file.flush()        show(0)for i, item in enumerate(it):yield itemshow(i+1)file.write("\n")file.flush()for i in progressbar(range(15), "Computing: ", 40):do_something()time.sleep(0.1)

自己定义的好处就是可以将进度条定义成我们想要的形式比如上面就是使用#与·来输出,为什么不用print?因为sys.stdout就是print的一种默认输出格式,而sys.stdout.write()可以不换行打印,sys.stdout.flush()可以立即刷新输出的内容。当然也可以封装成类来更好的使用[1] ,但效果是类似的。

from __future__ import print_function
import sys
import reclass ProgressBar(object):DEFAULT = 'Progress: %(bar)s %(percent)3d%%'FULL = '%(bar)s %(current)d/%(total)d (%(percent)3d%%) %(remaining)d to go'def __init__(self, total, width=40, fmt=DEFAULT, symbol='=',output=sys.stderr):assert len(symbol) == 1self.total = totalself.width = widthself.symbol = symbolself.output = outputself.fmt = re.sub(r'(?P<name>%\(.+?\))d',r'\g<name>%dd' % len(str(total)), fmt)self.current = 0def __call__(self):percent = self.current / float(self.total)size = int(self.width * percent)remaining = self.total - self.currentbar = '[' + self.symbol * size + ' ' * (self.width - size) + ']'args = {'total': self.total,'bar': bar,'current': self.current,'percent': percent * 100,'remaining': remaining}print('\r' + self.fmt % args, file=self.output, end='')def done(self):self.current = self.totalself()print('', file=self.output)from time import sleepprogress = ProgressBar(80, fmt=ProgressBar.FULL)for x in range(progress.total):progress.current += 1progress()sleep(0.1)
progress.done()

tqdm

之前我们说了,自定义的好处就是可以自己修改,那么使用第三方库的好处就是可以偷懒,不用自己写,拿来就能用。比如提到Python进度条那肯定会想到常用的tqdm,安装很简单pip install tqdm即可,使用也很简单,几行代码即可实现上面的进度条

from tqdm import trange
import time
for i in trange(10): time.sleep(1)

当然tqdm作为老牌的Python进度条工具,循环处理、多进程、多线程、递归处理等都是支持的,你可以在官方GitHub上学习[2] 、解锁更多的玩法。

Rich

上面两种实现Python进度条的方法都学会了吗,虽然简单但是看上去并不漂亮,颜色也比较单调。所以最后压轴出场的就是一款比较小众的第三方库Rich[3] 。Rich主要是用于在终端中打印丰富多彩的文本(最高支持1670万色)

所以当然可以使用Rich打印进度条,显示完成百分比,剩余时间,数据传输速度等都可以。并且样式更加酷炫,并且它是高度可配置的,因此我们可以对其进行自定义以显示所需的任何信息。使用也很简单,比如我们使用Rich来实现一个最简单的进度条。

from rich.progress import track
import  timefor step in track(range(30)):print('早起Python')time.sleep(0.5)

同时Rich支持多个进度条,这在多任务情况下监控的进度很有用(使用方法见官方文档)

参考资料

[1]stackoverflow: https://stackoverflow.com/questions/3160699/python-progress-bar
[2]Tqdm: https://github.com/tqdm/tqdm
[3]Rich: https://github.com/willmcgugan/rich

推荐阅读
  • 懂语言者得天下:NLP凭什么被称为人工智能的掌上明珠?

  • 如何用NLP辅助投资分析?三大海外机构落地案例详解

  • 张红忠:智慧化时代,如何通吃5G模组、AIoT?

  • 屏保壁纸引发血案,三星手机瞬间变砖

  • 借助大数据进行社交媒体营销,企业们得这么玩!

  • 力挺比特币的世界第2交易员:仅次于索罗斯,连续25年无亏损

你点的每个“在看”,我都认真当成了喜欢

http://lihuaxi.xjx100.cn/news/270036.html

相关文章

ピエタ~幸せの青い鳥~相关

先打全所有升级补丁 不然没有end4 补丁下载页 4个end出现方法 只看律视角 选项任意→end1 只看愛视角 选项任意→end2 检查一下 这两个流程的CG是否收全了 开启唯视角以后有些CG是找不回的 只看唯视角 选项任意→end3 只看唯视角 最后一个选项选“唯” 此后只要律或愛的视角开…

你还在认为 count(1) 比 count(*) 效率高?

点击上方蓝色“方志朋”&#xff0c;选择“设为星标”回复“666”获取独家整理的学习资料&#xff01;来源| blog.csdn.net/iFuMI/article/details/779207671、count(1) and count(*)2、count(1) and count(字段)3、count(*) 和 count(1)和count(列名)区别4、实例分析1. count(…

爆火的博士论文致谢,刚刚本人回应:祝愿大家努力终有所成!

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达杨净 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI“理想不伟大&#xff0c;只愿年过半百&#xff0c;归来仍是少年&#xff0c;希望还有机会重新认识这个世界&#xff0c…

惯性导航系统简介

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达前面文章中我们介绍过SLAM中的两大类传感器&#xff1a;激光雷达和视觉传感器&#xff0c;并详细分析了其优缺点。而实际上&#xff0c;在基于移动机器人的SLAM中&#x…

当我们按下电源键,Android 究竟做了些什么?

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由goo发表于云社区专栏 相信我们对Android系统都不陌生&#xff0c;而Android系统博大精深&#xff0c;被各种各样的智能设备承载的同时&#xff0c;我们会否好奇过&#xff0c;如此复杂的Android究竟是…

简述软件配置管理

http://blog.csdn.net/zhangmike/article/details/470477本文用菊子曰发布转载于:https://www.cnblogs.com/sdsunjing/p/5019791.html

Uber 前无人驾驶工程师告诉你,国内无人驾驶之路还要走多久?

受访者 | Graviti 创始人&CEO 崔运凯记者 | Aholiab&#xff0c;编辑 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;经过数年的发展&#xff0c;现在的人们谈到“AI”已经不再像过去一般感到遥不可及。但 AI 在国内发挥的作用仍然只是冰山一角&#xff…

java queue size_Java中的PriorityQueue size() 方法 - Break易站

Java.util.PriorityQueue.size()方法用于获取PriorityQueue的大小或PriorityQueue中存在的元素数。句法&#xff1a;Priority_Queue.size()参数&#xff1a;此方法不带任何参数。返回值&#xff1a;该方法返回PriorityQueue中存在的元素的大小或数量。下面的程序说明了Java.uti…