tqdm - Python进度条库

tqdm 是一个快速、可扩展的Python进度条库,名称来源于阿拉伯语”taqaddum”(تقدّم,意为”进步”),也是西班牙语”te quiero demasiado”(我非常爱你)的缩写。

什么是 tqdm?

tqdm 可以在 Python 的长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。它可以帮助我们监测程序运行的进度,估计运行的时长,对于在长时间运行的任务中显示进度非常有用,因为它可以让用户知道任务正在进行

tqdm 具有以下优点:

  • 易于使用: 只需在 Python 循环中包裹你的迭代器,一行代码就能产生一个精美的进度条。
  • 灵活: 它可以和 for 循环、pandas dataframe 的 apply 函数以及 Python 的 map 函数等等配合使用。
  • 高效: tqdm 使用了智能算法,即使在数据流非常快的情况下,也不会拖慢你的代码速度。

安装

1
pip install tqdm

基本用法

在循环中使用

1
2
3
4
5
from tqdm import tqdm
import time

for i in tqdm(range(100)):
time.sleep(0.1) # 模拟耗时操作

输出示例:

1
76%|████████████████████████████ | 76/100 [00:07<00:02, 9.99it/s]

使用trange快捷方式

trange(N)tqdm(range(N)) 的快捷方式

1
2
3
4
5
from tqdm import trange
import time

for i in trange(100):
time.sleep(0.1)

高级功能

手动控制进度

1
2
3
4
5
6
7
from tqdm import tqdm
import time

with tqdm(total=100) as pbar:
for i in range(10):
time.sleep(0.1)
pbar.update(10) # 每次更新10

自定义描述和单位

1
2
3
4
5
from tqdm import tqdm
import time

for i in tqdm(range(100), desc="处理中", unit="文件"):
time.sleep(0.1)

嵌套进度条

1
2
3
4
5
6
from tqdm import tqdm
import time

for i in tqdm(range(4), desc="外层"):
for j in tqdm(range(10), desc="内层", leave=False): # leave=False 选项将在内部循环结束后删除内部循环的进度条
time.sleep(0.01)

使用 tqdm.write 打印信息

在循环中,如果直接使用 print 可能会干扰进度条的显示。tqdm.write() 方法可以在进度条下方干净地打印信息

1
2
3
4
5
6
7
8
from tqdm import trange
import time

bar = trange(10)
for i in bar:
time.sleep(0.1)
if not (i % 3):
tqdm.write(f"Done task {i}")

在文件下载中显示进度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
from tqdm import tqdm
import os

url = "https://example.com/large_file.zip" # 替换为实际文件下载链接
filename = "large_file.zip"

response = requests.get(url, stream=True)
total_size = int(response.headers.get('content-length', 0))
block_size = 1024 # 1 KB

tqdm_bar = tqdm(total=total_size, unit='iB', unit_scale=True, desc=filename)

with open(filename, 'wb') as f:
for data in response.iter_content(block_size):
tqdm_bar.update(len(data))
f.write(data)

tqdm_bar.close()

集成 Pandas

tqdm 可以方便地与 Pandas 的 apply 方法集成,显示数据处理进度

1
2
3
4
5
6
7
8
9
10
11
import pandas as pd
from tqdm.pandas import tqdm_pandas # 导入 tqdm.pandas

# 假设您有一个 DataFrame
df = pd.DataFrame({'text': [f'some text {i}' for i in range(1000)]})

# 注册 pandas 扩展
tqdm_pandas(desc="Processing DataFrame")

# 使用 progress_apply 代替 apply
df['processed_text'] = df['text'].progress_apply(lambda x: x.upper()) # 模拟处理函数

在深度学习模型训练中使用

在训练深度学习模型时,通常会在 epoch 循环或 batch 循环中使用 tqdm 来显示训练进度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 假设 train_dataloader 是您的数据加载器
# model 是您的模型
# num_epochs 是训练的总轮数

from tqdm import tqdm
import time

# 示例训练循环结构
# for epoch in range(num_epochs):
# # 在每个 epoch 开始时创建一个进度条
# epoch_iterator = tqdm(train_dataloader, desc=f"Epoch {epoch+1}/{num_epochs}")
#
# for batch in epoch_iterator:
# # 模型训练代码...
# # loss = ...
#
# # 可以选择在 batch 级别更新进度条描述,例如显示当前 loss
# # epoch_iterator.set_description(f"Epoch {epoch+1}/{num_epochs}, Loss: {loss:.4f}")
# time.sleep(0.01) # 模拟 batch 处理时间
#
# # epoch 结束,进度条自动完成

# 简化示例
for epoch in tqdm(range(5), desc="Training Epochs"):
# 假设每个 epoch 有 100 个 batch
for batch in range(100):
time.sleep(0.01) # 模拟 batch 处理时间

命令行使用

tqdm 也可以直接在命令行中使用:

1
2
3
4
5
6
7
8
9
# 统计行数并显示进度
$ seq 9999999 | tqdm --bytes | wc -l
75.2MB [00:00, 217MB/s]
9999999

# 7z压缩时显示进度
$ 7z a -bd -r backup.7z docs/ | grep Compressing | \
tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log
100%|███████████████████████████████▉| 8014/8014 [01:37<00:00, 82.29files/s]

不同环境支持

tqdm 支持多种环境:

  1. Jupyter Notebook: 使用 tqdm.notebook 模块
  2. GUI应用: 使用 tqdm.tktqdm.gui 模块
  3. 异步编程: 使用 tqdm.asyncio 模块
  4. Keras集成: 使用 tqdm.keras 模块

性能特点

  • 极低的开销:约60ns/次迭代
  • 智能算法预测剩余时间
  • 自动调整显示频率以避免性能影响
  • 跨平台支持(Linux/Windows/Mac等)

更多资源


© 2025 vmoranv 使用 Stellar 创建


😊本站2025.05.05日起🎉累计访问人次💻


614447.xyz