tqdm 库
tqdm
是一个 快速、可扩展的 Python 进度条工具。它的名字来自于阿拉伯语 taqaddum (تقدّم),意思是“进步”,同时也是西班牙语 te quiero demasiado (我爱你太多) 的缩写。
它的主要用途是:为循环和长时间运行的操作提供一个视觉上的进度指示器,让你能够直观地看到:
当前进度:已经完成了多少。
执行速度:每秒处理多少迭代(it/s)。
预计剩余时间:大概还需要多久才能完成。
总耗时:已经运行了多长时间。
这在你处理大量数据、训练模型、下载文件或任何需要等待的循环任务时极其有用,可以避免“程序是否卡死了”的焦虑。
主要特点和优势
易于使用:只需在循环外包装一个
tqdm
函数,即可添加进度条,代码改动极小。轻量级:库本身非常小,依赖很少。
可定制:可以灵活设置描述信息、单位、进度条长度、颜色等。
高性能:开销极低,通常只会使循环速度降低不到10%。
平台兼容性好:在命令行、Jupyter Notebook、甚至图形界面中都能良好工作。
基本用法示例
1. 在命令行循环中使用(最常用)
这是 tqdm
最经典的使用场景。
from tqdm import tqdm
import time# 假设我们有一个需要遍历的列表
data = range(1000)# 只需将你的可迭代对象传入 tqdm()
for item in tqdm(data):# 模拟一些耗时的操作,比如处理数据time.sleep(0.01) # 休眠10毫秒
# 输出效果: # 76%|████████████████████████████ | 756/1000 [00:07<00:02, 105.23it/s]
2. 手动更新进度(适用于非循环或未知总量的任务)
当你不知道总共有多少迭代次数时(例如下载文件),可以手动控制进度条的更新。
from tqdm import tqdm
import time# 创建一个进度条,但不传入总量(total)
pbar = tqdm(total=100) # 这里也可以先设置一个预估的总量for i in range(10):# 模拟一个每次完成量不一致的任务time.sleep(0.2)# 手动更新进度条,这里一次更新了10个单位pbar.update(10)# 记得关闭进度条
pbar.close()
3. 在 Jupyter Notebook 中使用
tqdm
为 Jupyter 提供了专门的子模块,能渲染出更漂亮的网页进度条。
from tqdm.notebook import tqdm
import timefor i in tqdm(range(100)):time.sleep(0.02)
4. 为 pandas
操作添加进度条
tqdm
可以很好地与 pandas
集成。
import pandas as pd
from tqdm import tqdm# 首先需要注册一下
tqdm.pandas()# 创建一个示例DataFrame
df = pd.DataFrame({'x': range(100000)})# 使用 progress_apply 代替 apply,就会显示进度条
df['y'] = df['x'].progress_apply(lambda x: x**2)
常用参数定制
你可以通过参数来美化你的进度条:
for i in tqdm(range(100),desc="Processing", # 进度条前的描述文字,例如:"Processing: 76%"unit="files", # 单位,将 it/s 改为 files/sncols=100, # 进度条的固定宽度ascii=True, # 使用 ASCII 字符,在某些终端兼容性更好colour='green', # 设置进度条颜色(不是所有环境都支持)
):time.sleep(0.05)
总结
场景 | 使用方法 |
---|---|
标准循环 | for i in tqdm(iterable): |
手动更新(已知总量) | pbar = tqdm(total=100); pbar.update(10) |
Jupyter Notebook | from tqdm.notebook import tqdm |
Pandas 操作 | tqdm.pandas(); df.progress_apply(func) |
总而言之,tqdm
是每个 Python 开发者工具箱中都应该有的“神器”之一。它用极少的代码极大地提升了用户体验和开发效率,是监控长时间运行任务的绝佳选择。