tqdm的介绍与使用
tqdm的介绍和使用
tqdm是一个用于在Python程序中显示进度条的库,尤其是在长时间运行的循环中,它能够直观地展示程序的执行进度,极大地提升用户体验。tqdm是“taqaddum”的缩写,阿拉伯语中的意思是“进展”。这个库非常轻量级,易于使用,并且能够与Python的任何循环或迭代器兼容。
1. 安装tqdm
在开始使用tqdm之前,我们需要先安装它。可以通过以下命令轻松安装:
pip install tqdm
2. 基本用法
tqdm的基本用法非常简单,只需要将你希望跟踪进度的可迭代对象传递给tqdm()函数即可。
例如,下面是一个使用tqdm包装range()函数的例子:
from tqdm import tqdm
import time
# 使用tqdm包装range对象
for i in tqdm(range(10)):
time.sleep(0.5) # 模拟耗时任务
在这个例子中,程序会每0.5秒更新一次进度条。你可以看到终端中会显示进度条,告诉你程序的执行进度。
3. 自定义描述信息
你可以为进度条添加描述信息,帮助用户更好地理解程序正在做什么。通过tqdm的desc参数,我们可以在进度条前面添加自定义的文本。
from tqdm import tqdm
import time
for i in tqdm(range(10), desc="Processing"):
time.sleep(0.5)
在上面的代码中,进度条会显示"Processing",让用户知道这个进度条表示的是哪个任务。
4. 进度条的格式化
tqdm支持多种格式化选项,你可以根据需求定制进度条的外观。例如,可以控制进度条的长度、显示的字符以及时间格式等。
from tqdm import tqdm
import time
for i in tqdm(range(10), ncols=100, bar_format="{l_bar}{bar}| {n_fmt}/{total_fmt}"):
time.sleep(0.5)
在这个示例中,ncols控制进度条的宽度,而bar_format让你自定义进度条的显示格式。
5. 进度条的嵌套
tqdm支持嵌套进度条。当你有多个嵌套的任务时,可以使用tqdm来分别显示每个任务的进度。
from tqdm import tqdm
import time
for i in tqdm(range(3), desc="Outer loop"):
for j in tqdm(range(10), desc="Inner loop", leave=False):
time.sleep(0.1)
在这个示例中,外层和内层循环都有自己的进度条,leave=False表示内层进度条完成后会被删除。
6. 手动更新进度条
有时我们希望手动更新进度条,而不是依赖循环自动更新。tqdm提供了update()方法,允许我们根据需要更新进度条。
from tqdm import tqdm
import time
pbar = tqdm(total=10) # 设置总进度为10
for i in range(10):
time.sleep(0.5)
pbar.update(1) # 手动更新进度
pbar.close() # 关闭进度条
7. 与pandas结合使用
tqdm不仅可以与标准的Python循环结合使用,还可以与pandas库中的DataFrame或Series一起工作。当处理大型数据集时,使用tqdm可以方便地显示数据处理的进度。
import pandas as pd
from tqdm import tqdm
tqdm.pandas() # 注册pandas的进度条
df = pd.DataFrame({'col1': range(1, 1001)})
# 使用progress_apply显示进度
df['col2'] = df['col1'].progress_apply(lambda x: x ** 2)
8. 与多线程/多进程结合使用
tqdm还支持与threading和multiprocessing模块结合使用,以便在并发任务中显示进度条。
与multiprocessing结合
from tqdm import tqdm
from multiprocessing import Pool
import time
def worker(x):
time.sleep(0.1)
return x
if __name__ == "__main__":
with Pool(4) as p:
list(tqdm(p.imap(worker, range(10)), total=10))
在这个例子中,我们使用tqdm显示并行计算的进度。
9. 进度条的其它高级选项
tqdm提供了许多高级选项来定制进度条。例如,可以设置dynamic_ncols=True来根据终端窗口的大小动态调整进度条的宽度,或者使用position来控制多个进度条的显示位置。
from tqdm import tqdm
import time
for i in tqdm(range(10), dynamic_ncols=True, position=0):
time.sleep(0.5)
10. 总结
tqdm是一个非常强大的工具,能够让我们轻松地为Python中的长时间运行任务添加进度条。无论是在单线程、线程池、进程池,还是与pandas结合使用,tqdm都能非常方便地集成进来。通过简单的API调用和丰富的自定义选项,tqdm是提高代码用户体验、优化反馈效率的利器。