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文件和目录操作详解
Feb 08 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python快速查找list中相同部分的方法
Jun 27 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
python获取栅格点和面值的实现
Mar 10 Python
Python无头爬虫下载文件的实现
Apr 02 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Python Pandas解析读写 CSV 文件
宝塔更新Python及Flask项目的部署
python模板入门教程之flask Jinja
使用Python解决图表与画布的间距问题
Python的property属性详细讲解
Apr 11 #Python
OpenCV项目实践之停车场车位实时检测
You might like
js下函数般调用正则的方法附代码
2008/06/22 PHP
php简单实现MVC
2015/02/05 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
python模拟鼠标拖动操作的方法
2015/03/11 Python
Python批量转换文件编码格式
2015/05/17 Python
python批量提取word内信息
2015/08/09 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
Python3.5局部变量与全局变量作用域实例分析
2019/04/30 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
深入浅析python的第三方库pandas
2020/02/13 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
python urllib和urllib3知识点总结
2021/02/08 Python
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
办理暂住证介绍信
2014/01/11 职场文书
企业职业病防治方案
2014/05/29 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python