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 16 Python
详解Python中DOM方法的动态性
Apr 11 Python
简介Python中用于处理字符串的center()方法
May 18 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
python3实现跳一跳点击跳跃
Jan 08 Python
对python函数签名的方法详解
Jan 22 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
python中的print()输出
Apr 12 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
python集合常见运算案例解析
Oct 17 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
Python的scikit-image模块实例讲解
Dec 30 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 保留字列表
2012/10/04 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
简单使用Python自动生成文章
2014/12/25 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
办公室副主任职责范本
2014/03/08 职场文书
求职推荐信范文
2015/03/27 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android