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中解析XML数据的方法
Oct 15 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
Python中 Lambda表达式全面解析
Nov 28 Python
django DRF图片路径问题的解决方法
Sep 10 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
Python类继承和多态原理解析
Feb 05 Python
Django设置Postgresql的操作
May 14 Python
如何在vscode中安装python库的方法步骤
Jan 06 Python
python用字节处理文件实例讲解
Apr 13 Python
Python编程根据字典列表相同键的值进行合并
Oct 05 Python
python可视化大屏库big_screen示例详解
Nov 23 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Python Pandas解析读写 CSV 文件
宝塔更新Python及Flask项目的部署
python模板入门教程之flask Jinja
使用Python解决图表与画布的间距问题
Python的property属性详细讲解
Apr 11 #Python
OpenCV项目实践之停车场车位实时检测
You might like
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
浅析Jquery操作select
2016/12/13 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
python采用getopt解析命令行输入参数实例
2014/09/30 Python
Python实现选择排序
2017/06/04 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
Python matplotlib可视化实例解析
2020/06/01 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
网络管理专业求职信
2014/03/15 职场文书
承诺书怎么写
2014/03/26 职场文书
校园文明倡议书
2014/05/16 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
业务员岗位职责
2015/02/03 职场文书
社区节水倡议书
2015/04/29 职场文书
爱国电影观后感
2015/06/19 职场文书
英语教学课后反思
2016/02/15 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书