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实现将数据库一键导出为Excel表格的实例
Dec 30 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
简单了解Django ContentType内置组件
Jul 23 Python
python3.6编写的单元测试示例
Aug 17 Python
Python接口测试结果集实现封装比较
May 01 Python
Python 解析xml文件的示例
Sep 29 Python
用Python 执行cmd命令
Dec 18 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
Python自动化之批量处理工作簿和工作表
Jun 03 Python
手残删除python之后的补救方法
Jun 26 Python
Python Django获取URL中的数据详解
Nov 01 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
php与paypal整合方法
2010/11/28 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
python实现的udp协议Server和Client代码实例
2014/06/04 Python
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
编程用JAVA解析XML的方式
2013/07/07 面试题
魅力教师事迹材料
2014/01/10 职场文书
征婚广告词
2014/03/17 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
工商行政处罚决定书
2015/06/24 职场文书
小学生读书笔记
2015/07/01 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
vue实现在data里引入相对路径
2022/06/05 Vue.js