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中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
Python 不同对象比较大小示例探讨
Aug 21 Python
详细探究Python中的字典容器
Apr 14 Python
Python搭建FTP服务器的方法示例
Jan 19 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
python主线程捕获子线程的方法
Jun 17 Python
python调用webservice接口的实现
Jul 12 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
python 的topk算法实例
Apr 02 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
基于Django快速集成Echarts代码示例
Dec 01 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静态成员变量和非静态成员变量详解
2017/02/14 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
js闭包实例汇总
2014/11/09 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python 递归函数详解及实例
2016/12/27 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python tkinter组件使用详解
2019/09/16 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
教师先进个人材料
2014/12/17 职场文书
陈斌强事迹观后感
2015/06/17 职场文书