谈到Python的进度条,相信大家用的最多的就是tqdm库了,比如这样:

1
2
3
4
import time
from tqdm import tqdm
for i in tqdm(range(20)):
time.sleep(1)

运行上述代码,便可以看到如下的进度条:

今天要分享的是另外一款Python进度条,相较于老前辈tqdm,在视觉效果上更加炫酷,话不多说,开整!

这款进度条依赖于rich库中的progress模块进行实现,所以第一步就是安装rich库,直接pip install rich即可搞定。

在完成rich库的安装后,就可以实现一个简易的Python进度条啦:

1
2
3
4
5
import time
from rich.progress import track

for i in track(range(20), description="Processing..."):
time.sleep(1)

效果如下:

也可以同时展示多个任务进度条:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import time

from rich.progress import Progress

with Progress() as progress:

# 描述文字的颜色可自定义
task1 = progress.add_task("[red]Downloading...", total=1000)
task2 = progress.add_task("[green]Processing...", total=1000)
task3 = progress.add_task("[cyan]Cooking...", total=1000)

while not progress.finished:
progress.update(task1, advance=0.5)
progress.update(task2, advance=0.3)
progress.update(task3, advance=0.9)
time.sleep(0.02)

效果:

它还支持一边在屏幕输出,一边显示当前进度:

1
2
3
4
5
6
7
8
9
10
11
12
13
from time import sleep

from rich.table import Column
from rich.progress import Progress, BarColumn, TextColumn

text_column = TextColumn("{task.description}", table_column=Column(ratio=1))
bar_column = BarColumn(bar_width=None, table_column=Column(ratio=2))
progress = Progress(text_column, bar_column, expand=True)

with progress:
for n in progress.track(range(100)):
progress.print(n)
sleep(0.1)

运行上述代码,在打印0到99的同时,底部进度条在指示着当前打印的进度:

你还可以在终端打印日志信息,信息的格式也可以自定义:

1
2
3
4
5
6
7
8
9
10
import time

from rich.progress import Progress

with Progress() as progress:
task = progress.add_task("twiddling thumbs", total=100)
for job in range(100):
progress.console.print(f"[bold blue]Working on job #{job}")
time.sleep(0.1)
progress.advance(task)

效果:

读取本地文件时也可以加个进度条:

1
2
3
4
import rich.progress

with rich.progress.open("data.txt", "r") as file:
data = file.readlines()

效果:

对了,进度条只是rich库的一个玩法,更多玩法可以去官方手册自行探索~

参考: