Python几种酷炫的进度条的方式


Posted in Python onApril 11, 2022

前言:

在下载某些文件的时候你一定会不时盯着进度条,在写代码的时候使用进度条可以便捷的观察任务处理情况。

除了使用 print 来打印之外,今天本文我来给大家介绍几种酷炫的进度条的方式。

Python几种酷炫的进度条的方式

1、自定义ProgressBar

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

import sys
import time

def 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 item
        show(i+1)
    file.write("\n")
    file.flush()

    
for i in progressbar(range(15), "Computing: ", 40):
    do_something()
    time.sleep(0.1)

Python几种酷炫的进度条的方式

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

from __future__ import print_function
import sys
import re


class 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) == 1

        self.total = total
        self.width = width
        self.symbol = symbol
        self.output = output
        self.fmt = re.sub(r'(?P<name>%\(.+?\))d',
            r'\g<name>%dd' % len(str(total)), fmt)

        self.current = 0

    def __call__(self):
        percent = self.current / float(self.total)
        size = int(self.width * percent)
        remaining = self.total - self.current
        bar = '[' + 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.total
        self()
        print('', file=self.output)
        
from time import sleep

progress = ProgressBar(80, fmt=ProgressBar.FULL)

for x in range(progress.total):
    progress.current += 1
    progress()
    sleep(0.1)
progress.done()

Python几种酷炫的进度条的方式

2、tqdm

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

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

Python几种酷炫的进度条的方式

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

3、Rich

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

Python几种酷炫的进度条的方式

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

from rich.progress import track
import  time

for step in track(range(30)):
    time.sleep(0.5)

Python几种酷炫的进度条的方式

同时Rich支持多个进度条,这在多任务情况下监控的进度很有用

Python几种酷炫的进度条的方式

Python 相关文章推荐
Python输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
pymongo为mongodb数据库添加索引的方法
May 11 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
May 05 Python
Python处理Excel文件实例代码
Jun 20 Python
解决Python 中英文混输格式对齐的问题
Jul 16 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
python中web框架的自定义创建
Sep 08 Python
学习Django知识点分享
Sep 11 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Python Pandas解析读写 CSV 文件
宝塔更新Python及Flask项目的部署
python模板入门教程之flask Jinja
使用Python解决图表与画布的间距问题
Python的property属性详细讲解
Apr 11 #Python
OpenCV项目实践之停车场车位实时检测
You might like
php实现统计网站在线人数的方法
2015/05/12 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
web页面数据展示新想法(json)
2010/06/08 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
Python读取Excel的方法实例分析
2015/07/11 Python
Django自定义认证方式用法示例
2017/06/23 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
《孔子拜师》教学反思
2014/02/24 职场文书
申论倡议书范文
2014/05/13 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
校运会广播稿
2015/08/19 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript