Python进度条tqdm的用法详解
简介
Python中的tqdm
是一个用于显示进度条的库,可以方便地在循环时显示任务的进度条,使代码更加美观而又直观。
tqdm
默认情况下可以显示进度条、已完成的百分比、已完成的任务数量、预计剩余时间等信息。
安装
通过pip
安装tqdm
库:
pip install tqdm
基本用法
使用tqdm
最基本的用法是通过包裹一个可迭代对象来展示其循环进度:
from tqdm import tqdm
for i in tqdm(range(1000000)):
pass
上面的代码演示了一个循环执行了 1000000 次的例子,可以看到tqdm
以进度条的形式实时展示了整个循环的完成情况。
高级用法
1. 控制刷新时间
tqdm
默认的刷新时间是 0.5 秒,我们可以通过设置参数 mininterval
改变刷新时间:
from tqdm import tqdm
for i in tqdm(range(1000000), mininterval=0.1):
pass
上面的代码将每 0.1 秒刷新一次进度。
2. 指定进度条样式
tqdm
支持多种不同的进度条样式,我们可以通过设置参数 bar_format
来指定:
from tqdm import tqdm
for i in tqdm(range(1000000), bar_format='{l_bar}{bar:10}{r_bar}{bar:-10b}'):
pass
上面的代码展示了另一种不同样式的进度条格式,整个进度条被分为左、中、右三部分:
l_bar
:指的是进度条的左部分,在左边空多少格都可以通过{n}
控制,具体可以参考官方文档;bar
:指的是进度条本身,默认展示为●
的形式,可以通过{bar:<length.char>}
来控制长度和填充字符;r_bar
:指的是进度条的右部分,在右边空多少格同样可以通过{n}
控制;bar:-10b
:指进度条背后的百分比,-10
代表占位符宽度为10,b
表示二进制形式表示百分比;
示例代码
示例1: 统计列表元素
下面这个例子演示了如何使用进度条遍历列表元素并且统计它们,同时设置了进度条的样式:
from tqdm import tqdm
data = [1,2,3,4,5,6,7,8]
result = 0
for i in tqdm(data, bar_format='{l_bar}{bar:10}{r_bar}{bar:-10b}'):
# 统计数据
result += i
print(result)
输出结果:
100%|███████████████████████████████████████████| 8/8 [00:00<00:00, 1689.94it/s]
36
示例2: 文件拷贝
下面这个例子演示了如何使用进度条将一个文件拷贝到另一个文件并且展示拷贝的进度:
from tqdm import tqdm
with open('input.mp4', 'rb') as f1, open('output.mp4', 'wb') as f2:
# 文件总大小
total_size = os.fstat(f1.fileno()).st_size
# 读取并写入文件
with tqdm(total=total_size, unit='B', unit_scale=True, unit_divisor=1024, desc='Copying file', miniters=1) as t:
while True:
# 一次读取1024*1024个字节(1M)
data = f1.read(1024 * 1024)
if not data:
break
# 写入数据
f2.write(data)
# 更新进度条
t.update(len(data))
上面的代码分别使用了如下参数:
total_size
表示拷贝的文件总大小;unit='B'
表示使用字节作为单位;unit_scale=True
表示自动根据文件大小调整单位(KB/MB/GB/...);unit_divisor=1024
表示进制基数,单位转换时用到;desc='Copying file'
表示进度条的描述信息;miniters=1
表示每秒钟最少刷新一次;
如果你尝试拷贝一个大文件,你将会看到一个进度条在不断增长,从而显示当前的进度。
总结
tqdm
是一个很好用的Python进度条库,可以方便地展示循环进度,使代码在执行过程中更美观,在大规模数据处理和归类的场景下也可以为开发者节省不少时间。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python进度条tqdm的用法详解 - Python技术站