tqdm是一个快速的,易扩展的,动态刷新的进度条提示模块
安装
pip install -i https://mirrors.aliyun.com/pypi/simple tqdm
使用方式
基于迭代器自动更新
向tqdm传入可迭代类型,示例1
import time
from tqdm import tqdm
for i in tqdm(range(100)):
# IO, 模型训练, 爬虫等耗时操作
time.sleep(0.05)
示例2:迭代时更新描述信息
import time
from tqdm import tqdm
char_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
progress_bar = tqdm(char_list)
for char in progress_bar:
time.sleep(0.8)
progress_bar.set_description(str(char))
手动更新进度
法1:使用with
语句,每次迭代调用progress_bar.update(n)
更新进度,参数n
表示每次更新的增量
import time
from tqdm import tqdm
total = 100
with tqdm(total=total) as progress_bar:
for i in range(total):
time.sleep(0.05)
# 手动更新进度, 参数n表示每次更新多少增量
progress_bar.update(1)
法2:直接将tqdm赋值给变量如progress_bar
,每次迭代调用progress_bar.update(n)
更新进度
- 注意,如果采用这种方式,在进度条代码执行结束后,必须通过
del progress_bar
或progress_bar.close()
释放progress_bar的资源
import time
from tqdm import tqdm
total = 100
progress_bar = tqdm(total=total)
for i in range(10):
time.sleep(0.04)
# 手动更新进度, 参数n表示每次更新多少增量
progress_bar.update(10)
# 注意必须通过del或close()释放progress_bar的资源
progress_bar.close()
# del progress_bar
示例:处理超大文件的数据并实时展示处理进度(不管是怎么处理的,先显示进度)
import time
from tqdm import tqdm
total = 10 * 1024 * 1024 # 共10M数据
progress_bar = tqdm(total=total, unit='B', unit_scale=True, unit_divisor=1024)
for i in range(100): # 共处理100次
time.sleep(0.1)
progress_bar.update(0.1 * 1024 * 1024) # 每次处理0.1M
progress_bar.close()
命令行
# 统计所有python脚本的行数
time find . -name '*.py' -exec cat \{} \; | tqdm | wc -l
857366it [00:03, 246471.31it/s]
857365
real 0m3.585s
user 0m0.862s
sys 0m3.358s
参数
tqdm(iterable=None, desc=None, total=None, leave=True, file=None,
ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None,
ascii=None, 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, delay=0.0, gui=False,
**kwargs)
iterable
:要迭代的对象,如果设置了则自动更新进度条;否则必须update
手动更新desc
:进度条前边的提示字符串,会自动添加冒号:
total
:迭代的次数,如果传入了iterable
,则内部为其赋值为len(iterable)
leave
:True
显示所有进度条;否则只显示第一个file
:类型为io.TextIOWrapper
或io.StringIO
,指定输出到哪里nclos
:输出信息的宽度mininterval
:进度条最小显示更新间隔maxinterval
:进度条最大显示更新间隔miniters
:迭代中显示最小进度的间隔,若为0并指定dynamic_miniters
,会自动调整到min_interval
;若>0则跳过指定数目的迭代ascii
:默认False
使用平滑块;否则使用ascii字符,指定字符时长度须>2disable
:默认False
启用进度条;否则禁用unit
:迭代的单位、单元。默认it
为轮数;B
为字节unit_scale
:默认False
禁用缩放;否则启用缩放,并在国际单一性系统标准之后添加一个度量前缀(kilo、mega等);如果有任何其他非零数,将按比例总计和ndynamic_ncols
:默认False
让nclos
参数生效;否则nclos
无效smoothing
:以指数级的速度进行增长,取值为[0, 1]
bar_format
:自定义进度条显示格式,但可能会影响性能。具体格式参考官网initial
:初始计数值position
:偏移量,从0开始postfix
:类型为dict
,在进度条的最后位置显示额外信息unit_divisor
:单位进位的进制,只有unit_scale=True
时才有效;在表示计算机数据大小时,一般手动设置为1024
而不是默认的1000
write_bytes
:默认False
写入的是unicode
;否则写入字节lock_args
:类型为tuple
,可获取中间输出gui
:默认False
;否则使用tqdm.gui.tqdm
代替,会使用matplotlib的动画输出
方法
-
update(n=1)
:手动更新进度条信息n
:更新进度的增量,默认为1
-
close()
:清除并关闭进度条 -
clear()
:清除当前显示的进度条 -
refresh(nolock=False, lock_args=None)
:强制刷新当前的进度条no_lock
:False
表示调用acquire
方法上锁,默认;True
表示不上锁lock_args
:类型为tuple
,传入到内部的函数acquire,指定后只有acquire返回True
才会显示进度条
-
unpause()
:重新启动上一次打印时tqdm的计数器 -
reset(total=None)
:重新指定total为0以重复利用total
:新的进度条的total
-
set_description(desc=None, refresh=True)
:设置进度条的描述字符串,字符串后自动添加冒号:
desc
:进度条的描述字符串refresh
:强制刷新,如果为True
,其实就是调用refresh
方法
progress_bar.set_description('当前进度')
-
set_description_str(desc=None, refresh=True)
:设置进度条的描述字符串,字符串后不添加:
-
set_postfix(ordered_dict=None, refresh=True, **kwargs)
:设置进度条最后的提示信息,以字典的形式传入k-vordered_dict
:显示在进度条后面位置的k-v字典refresh
:强制刷新**kwargs
:其他参数
progress_bar.set_postfix({'name': 'Azir', 'age': 23})
-
set_postfix_str(s='', refresh=True)
:设置进度条最后的提示信息字符串s
:显示在进度条最后一个位置的字符串refresh
:强制刷新
progress_bar.set_postfix_str('连接正常')