欢迎访问宙启技术站
智能推送

Python进度条库tqdm的高级应用技巧

发布时间:2023-12-11 11:03:09

tqdm是一个Python的进度条库,它可以在循环中显示进度条和估算剩余时间。tqdm的基本用法非常简单,只需要将迭代对象作为参数传入即可。但是,tqdm还有很多强大的高级功能,本文将介绍一些常用的高级应用技巧,并通过使用例子来说明。

1. 控制进度条的外观

tqdm允许你自定义进度条的样式,包括进度条的长度、填充字符、计时器的格式等。可以通过以下方式进行设置:

tqdm.format_meter_string = "{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_noinv_fmt}{postfix}]"

其中,l_bar是进度条的长度,bar是进度条的填充字符,n_fmt和total_fmt是当前迭代的索引和总数的格式,elapsed是已经过的时间,remaining是剩余时间,rate_noinv_fmt是每秒处理的平均速度,postfix是在进度条之后的自定义文本。

2. 进度条展示子任务的进度

有时候,我们需要展示一组子任务的进度。tqdm提供了nested参数来支持这个功能,可以通过组合多个tqdm实例来实现。下面是一个示例:

from tqdm import tqdm
import time

outer = tqdm(total=2, desc="Outer")
inner = tqdm(total=10, desc="Inner", leave=False)

for i in range(2):
    outer.update()
    for j in range(10):
        inner.update()
        time.sleep(0.1)
    
outer.close()
inner.close()

在上述代码中,我们使用了两个tqdm实例,outer和inner,用于表示外部任务和内部任务。在内部任务循环中,我们使用inner.update()更新内部任务的进度。leave=False参数用于控制内部任务完成后不会清空进度条,而是将进度条保留在最后一行。

3. 使用动态进度条显示

有时候,我们希望在进度条中显示正在进行的操作。tqdm提供了set_description方法来实现这个功能。下面是一个示例:

from tqdm import tqdm
import time

with tqdm(total=10, desc="Processing") as pbar:
    for i in range(10):
        time.sleep(0.1)
        pbar.set_description("Processing item %d" % (i+1))
        pbar.update(1)

在上述代码中,我们使用with语句创建了一个tqdm实例pbar,并设置了总数为10和描述为"Processing"。在每次循环时,我们使用pbar.set_description方法更新描述信息,并使用pbar.update方法更新进度条。

4. 使用tqdm进行IO操作的进度显示

在进行IO操作时,我们希望能够显示读取或写入的进度。tqdm提供了tqdm.write方法,可以实现对IO操作的进度显示。下面是一个示例:

from tqdm import tqdm
import shutil
import requests

url = "http://example.com/file.txt"
filename = "file.txt"

response = requests.get(url, stream=True)
total_size = int(response.headers.get('content-length', 0))

with tqdm(total=total_size, unit='B', unit_scale=True, desc=filename, leave=True) as pbar:
    with open(filename, 'wb') as f:
        for data in response.iter_content(chunk_size=1024):
            f.write(data)
            pbar.update(len(data))

在上述代码中,我们使用tqdm获取下载文件的大小,并设置进度条的单位为字节,并使用tqdm.write方法显示进度。

总结:

通过本文的介绍,我们学习了tqdm库的高级应用技巧,包括控制进度条的外观、展示子任务的进度、使用动态进度条显示和使用tqdm进行IO操作的进度显示。这些高级功能可以帮助我们更好地利用tqdm库,实现更加灵活和直观的进度条显示效果。