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登陆asp网站页面的实现代码
Jan 14 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 Python
python读取各种文件数据方法解析
Dec 29 Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 Python
使用python处理题库表格并转化为word形式的实现
Apr 14 Python
Python urllib.request对象案例解析
May 11 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
Nov 25 Python
python em算法的实现
Oct 03 Python
Django websocket原理及功能实现代码
Nov 14 Python
python如何调用php文件中的函数详解
Dec 29 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Python Pandas解析读写 CSV 文件
宝塔更新Python及Flask项目的部署
python模板入门教程之flask Jinja
使用Python解决图表与画布的间距问题
Python的property属性详细讲解
Apr 11 #Python
OpenCV项目实践之停车场车位实时检测
You might like
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
window.onload使用指南
2015/09/13 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
babel的使用及安装配置教程
2018/02/22 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
[50:50]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.20
2020/12/23 DOTA
详细介绍Python函数中的默认参数
2015/03/30 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
Form表单及django的form表单的补充
2019/07/25 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
PyTorch的torch.cat用法
2020/06/28 Python
python em算法的实现
2020/10/03 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
七年级音乐教学反思
2014/01/26 职场文书
商场中秋节活动方案
2014/02/07 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书