python - 如何格式化 tqdm 进度条以显示每分钟而不是每秒的进度?
问题描述
我在GitHub或文档中找不到这个,但我想知道是否有一种集成方式(首选)或解决方法来显示一次迭代所需的平均时间(以分钟而不是秒为单位)。
具体来说, tqdm 显示类似1283.31s/it
但如果每次迭代需要几分钟或几小时,显示类似21m/it
.
解决方案
我们可以通过将自定义参数添加到使用手册中部分描述bar_format
的说明的自定义实例来做到这一点:tqdm
class TqdmExtraFormat(tqdm):
"""Provides a `minutes per iteration` format parameter"""
@property
def format_dict(self):
d = super(TqdmExtraFormat, self).format_dict
rate_min = '{:.2f}'.format(1/d["rate"] / 60) if d["rate"] else '?'
d.update(rate_min=(rate_min + ' min/' + d['unit']))
return d
我们在这里所做的是覆盖format_dict
一个自定义版本,该版本添加了一个可以在bar_format
参数中使用的新统计信息。d
是现有的format_dict
,因此我们可以使用它来获取 的值{rate}
,将其转换为每次迭代的时间(1/rate),除以 60,然后将其格式化为小数点后 2 位。然后,我们d
使用新的统计信息进行更新——我们甚至可以使用字符串连接来添加一些格式。请注意,在任何迭代完成之前,{rate}
is None
,这意味着除非您进行if d["rate"]
检查,否则这将给出错误。
完成此操作后,如果您使用自定义实例,我们可以在参数字符串中使用此统计信息以及bar_format
参数中列出的统计信息:tqdm
b='{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_min}{postfix}]'
for i in TqdmExtraFormat(range(2), unit_scale = 60, bar_format=b):
time.sleep(6)
推荐阅读
- c# - 通过 GET 方法对 SAML Authn 请求的签名验证失败
- codenameone - 如何在加载时为 CN1 滑块进度设置动画
- sql-server - 不能在存储过程中调用函数
- mysql - 为什么像mysql中的查询同时使用索引和where条件?
- python-3.x - sqlite3 在 HDD 上似乎很慢
- c# - 2字节解压到4字节浮点数
- python - python blurwuzzy 比率服务器上的输出与本地计算机上的不同
- sublimetext3 - 强制 sublime 在 if/for 之后放置空间
- ios - 无法读取许可文件 LICENSE.txt - 创建 cocoapod
- bash - 如何停止 $ / 被剥离的字符串被插入到 sed 文件中?