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实现文件快照加密保护的方法
Jun 30 Python
详解Django通用视图中的函数包装
Jul 21 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
分享Python文本生成二维码实例
Jan 06 Python
详解Python中类的定义与使用
Apr 11 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python PIL图片添加字体的例子
Aug 22 Python
Python搭建代理IP池实现获取IP的方法
Oct 27 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Python Pandas解析读写 CSV 文件
宝塔更新Python及Flask项目的部署
python模板入门教程之flask Jinja
使用Python解决图表与画布的间距问题
Python的property属性详细讲解
Apr 11 #Python
OpenCV项目实践之停车场车位实时检测
You might like
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
js 目录列举函数
2008/11/06 Javascript
js opener的使用详解
2014/01/11 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
Python自动登录QQ的实现示例
2020/08/28 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
2014世界杯球队球队口号
2014/06/05 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js