Python中如何显示程序进度条

来源:Python中如何显示程序进度 (2018-09-17)

  • 一个好的脚本或者程序要能够直观的显示出当前的进度,就像你在Windows上拷贝一个文件,会显示已经完成了多少,还剩下多少,而不是呆呆的看着屏幕等待。下面就介绍几种常用的为脚本添加进度条的方法。

1、最简单的方法

  • 依次打印出当前进度

import time
n = 100
for i in range(n):
    time.sleep(0.1)
    if(i+1)%10 == 0:
        print(i+1)
  • 效果如下:

1701932404113

  • 但是这种方法有个缺点,就是容易被自己的进度刷屏。

2、只显示当前进度,避免刷屏

  • 在print的时候加上”\r”,这样就可以在同一个地方显示当前进度,而不会被刷屏。

import time
n = 100
for i in range(n):
    time.sleep(0.1)
    if(i + 1)%10 == 0:
        print(i+1, end = "\r")

1701932423986

3、添加进度条

  • 如果觉得仅仅数字显示进度不够美观,那么可以添加图形进度条

import sys,time
#定义一个进度条
def process_bar(num, total):
    rate = float(num)/total
    ratenum = int(100*rate)
    r = '\r[{}{}]{}%'.format('*'*ratenum,' '*(100-ratenum), ratenum)
    sys.stdout.write(r)
    sys.stdout.flush()

i,n =0,100
for i in range(n):
    time.sleep(0.01)
    process_bar(i+1,n)
  • 效果如下:

1701932434038

  • 这种方式实质上是每次重新输出一次进度,并且通过 “\r”覆盖原来的进度条。”\r”的作用是回到行首,不过在本人测试中似乎有一点小bug,就是当终端宽度不够时,回到行首就变成了另起一行,就会出现被进度条刷屏的问题。

4、使用tqdm模块

  • 首先是安装该模块,然后运行即可

import time
from tqdm import tqdm
for i in tqdm(range(100)):
    time.sleep(0.05)
  • 效果如下:

1701932443875

5、使用progress模块

  • progress模块提供了各种各样的进度条样式。并且能够自定义一些参数

import time
from progress.bar import Bar
#可以通过fill设置进度条填充符号,默认“#”
#可以通过suffix设置成百分比显示
bar = Bar("Loading", fill='$', max = 100, suffix = '%(percent)d%%')
for i in bar.iter(range(100)):
    time.sleep(0.01)

1701932453144

  • 你还可以设置其他形式的进度条,如下:

1701932467303

==== THE END ====