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 相关文章推荐
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
举例讲解Python中的死锁、可重入锁和互斥锁
Nov 05 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
Jun 04 Python
Python使用dis模块把Python反编译为字节码的用法详解
Jun 14 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
Python实现的调用C语言函数功能简单实例
Mar 13 Python
python实现函数极小值
Jul 10 Python
Python制作词云图代码实例
Sep 09 Python
pytorch常见的Tensor类型详解
Jan 15 Python
简单了解如何封装自己的Python包
Jul 08 Python
Python函数调用追踪实现代码
Nov 27 Python
安装不同版本的tensorflow与models方法实现
Feb 20 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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
深入认识javascript中的eval函数
2009/11/02 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python中的index()方法使用教程
2015/05/18 Python
python实现爬取千万淘宝商品的方法
2015/06/30 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
几个人围成一圈的问题
2013/09/26 面试题
三分钟自我介绍演讲稿
2014/08/21 职场文书
保密工作整改报告
2014/11/06 职场文书
2015年大学生工作总结
2015/04/21 职场文书
2016年教师节感言
2015/12/09 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
分析Python list操作为什么会错误
2021/11/17 Python