tqdm库学习之tqdm模块
一、简介
tqdm
是一个 Python 库,用于在循环或迭代的过程中显示进度条,帮助开发者轻松监控代码的执行进度。tqdm.tqdm
是该库的核心模块,提供了简单易用的进度条功能。
二、语法和参数
语法
from tqdm import tqdm
for item in tqdm(iterable, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, ascii=False, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000, write_bytes=False, lock_args=None, nrows=None, colour=None):
# 你的循环代码
参数
- iterable: 可迭代对象,如列表、元组等。
- desc: 字符串,用于描述进度条前缀的文本。
- total: 整数,表示总迭代次数。如果未指定,将尝试从
iterable
中自动推断。 - leave: 布尔值,是否在完成后保留进度条。
- file: 文件对象,表示进度条输出的目标(默认为
sys.stderr
)。 - ncols: 整数,设置进度条的宽度。如果为
None
,将自动调整。 - mininterval: 浮点数,更新进度条之间的最小时间间隔(以秒为单位)。
- maxinterval: 浮点数,更新进度条之间的最大时间间隔(以秒为单位)。
- miniters: 整数,最小迭代次数,达到此次数后更新进度条。
- ascii: 布尔值或字符串,进度条是否使用 ASCII 字符。
- disable: 布尔值,是否禁用进度条。
- unit: 字符串,设置进度条的单位。
- unit_scale: 布尔值或数字,是否自动缩放单位。
- dynamic_ncols: 布尔值,是否动态调整进度条宽度。
- smoothing: 浮点数,平滑因子,用于计算速度的指数加权平均值。
- bar_format: 字符串,自定义进度条的显示格式。
- initial: 整数,设置进度条的初始位置。
- position: 整数,多重进度条时的指定位置。
- postfix: 字典或字符串,用于在进度条末尾添加的额外信息。
- unit_divisor: 数字,缩放单位时的除数。
- write_bytes: 布尔值,如果设置为
True
,则进度条将以字节形式输出。 - lock_args: 元组,用于多进程的锁定参数。
- nrows: 整数,指定进度条的最大行数。
- colour: 字符串,指定进度条的颜色(仅在支持颜色的环境中有效)。
返回值
tqdm
对象,表示进度条,可以用于手动控制更新。
三、实例
3.1 简单进度条
from tqdm import tqdm
import time
for i in tqdm(range(10)):
time.sleep(0.1)
输出:
100%|███████████| 10/10 [00:01<00:00, 9.92it/s]
3.2 自定义描述和单位
from tqdm import tqdm
import time
for i in tqdm(range(10), desc="Processing", unit="iteration"):
time.sleep(0.1)
输出:
Processing: 100%|████████| 10/10 [00:01<00:00, 9.93iteration/s]
3.3 动态更新信息
from tqdm import tqdm
import time
with tqdm(total=100, postfix={'status': 'Initializing'}) as pbar:
for i in range(10):
time.sleep(0.1)
pbar.update(10) # 更新进度条,步长为10
pbar.set_postfix({'status': f'Step {i+1}/10'}) # 设置进度条的后缀
pbar.set_description(f"Processing {i+1}")
pbar.set_postfix({'status': 'Complete'})
pbar.close()
输出:
Processing 10: 100%|██████████████████| 100/100 [00:01<00:00, 98.57it/s, status=Step 10/10]
3.4 自定义样式
from tqdm import tqdm
import time
total = 50
for i in tqdm(range(total), desc="Processing", bar_format="{desc}: {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}{postfix}]"):
time.sleep(0.1)
输出:
Processing: 50/50 [00:05<00:00, 9.92it/s]
3.5 多进度条
from tqdm import tqdm
import time
with tqdm(total=100, desc="First") as pbar1, tqdm(total=100, desc="Second") as pbar2:
for i in range(100):
time.sleep(0.05)
pbar1.update(1)
pbar2.update(1)
这在同时处理多个任务时相当有用。
输出:
Second: 100%|████████████| 100/100 [00:05<00:00, 19.70it/s]
First: 100%|████████████| 100/100 [00:05<00:00, 19.70it/s]
3.5 嵌套进度条
from tqdm import tqdm
import time
outer = tqdm(total=100, desc="Outer Loop")
for i in range(100):
inner = tqdm(total=100, desc="Inner Loop", leave=False)
for j in range(100):
time.sleep(0.01)
inner.update(1) # 内部进度条更新1
outer.update(1) # 外部进度条更新1
inner.close() # 内部进度条关闭(因为已经完成)
outer.close() # 外部进度条关闭(因为已经完成
输出
Outer Loop: 30%|██████████████| 30/100 [00:31<01:12, 1.04s/it]
Inner Loop: 30%|██████████████| 30/100 [00:00<00:00, 94.66it/s]
3.6 更新频率控制
from tqdm import tqdm
import time
total = 50
for i in tqdm(range(total), desc="Processing", mininterval=2):
time.sleep(0.1)
-
mininterval:进度条呈现的刷新间隔,2秒刷新一次进度条,避免因为更新过快来不及观看。
注意:这里的2秒只是刷新显示效果,在上面的代码中进度条更新依然是以0.1为时间单位进行更新的。
输出
Processing: 100%|████████████| 50/50 [00:05<00:00, 9.97it/s]
四、注意事项
tqdm
在 Jupyter Notebook 中使用时,可以通过导入tqdm.notebook
模块来启用更好看的进度条。- 使用
disable=True
参数可以禁用进度条显示,在不需要进度条的情况下提高性能。 - 进度条输出的位置可以通过
position
参数进行调整,特别是在多线程或多进程的环境中。 - 还有一些其他的库也可以完成相应的功能,如
click
、rich
等库,读者可自行探索。