tqdm - Python进度条库
tqdm 是一个快速、可扩展的Python进度条库,名称来源于阿拉伯语”taqaddum”(تقدّم,意为”进步”),也是西班牙语”te quiero demasiado”(我非常爱你)的缩写。
什么是 tqdm?
tqdm 可以在 Python 的长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)
。它可以帮助我们监测程序运行的进度,估计运行的时长,对于在长时间运行的任务中显示进度非常有用,因为它可以让用户知道任务正在进行
tqdm 具有以下优点:
- 易于使用: 只需在 Python 循环中包裹你的迭代器,一行代码就能产生一个精美的进度条。
- 灵活: 它可以和 for 循环、pandas dataframe 的 apply 函数以及 Python 的 map 函数等等配合使用。
- 高效: 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)
|
自定义描述和单位
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): 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
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
df = pd.DataFrame({'text': [f'some text {i}' for i in range(1000)]})
tqdm_pandas(desc="Processing DataFrame")
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
|
from tqdm import tqdm import time
for epoch in tqdm(range(5), desc="Training Epochs"): for batch in range(100): time.sleep(0.01)
|
命令行使用
tqdm 也可以直接在命令行中使用:
1 2 3 4 5 6 7 8 9
| $ seq 9999999 | tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s] 9999999
$ 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 支持多种环境:
- Jupyter Notebook: 使用
tqdm.notebook
模块
- GUI应用: 使用
tqdm.tk
或 tqdm.gui
模块
- 异步编程: 使用
tqdm.asyncio
模块
- Keras集成: 使用
tqdm.keras
模块
性能特点
- 极低的开销:约60ns/次迭代
- 智能算法预测剩余时间
- 自动调整显示频率以避免性能影响
- 跨平台支持(Linux/Windows/Mac等)
更多资源