快速、可扩展的进度表
tqdm的Python项目详细描述
全面质量管理
tqdm 在阿拉伯语中表示"进步"( taqadum ,___) 是西班牙语中"我非常爱你"的缩写( te quiero demasiado )。
立即让你的循环显示一个智能进度表-只要包装任何 用TQM(iterable)就行了!
fromtqdmimporttqdmforiintqdm(range(10000)):...
76%.碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石碎石 __7568/10000[00:33<;00:10,229.00it/s]
trange(n) 也可用作 tqdm(x范围(n))
< dl >它也可以作为带有管道的模块执行:
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]
开销很低——每次迭代大约60ns(80ns,带有TQM图形用户界面),并且 根据性能回归进行单元测试。 相比之下 进度条已经 头顶800ns/iter。
除了低开销之外, tqdm 还使用智能算法来预测 剩余时间和跳过不必要的迭代显示,这允许 在大多数情况下可以忽略不计的开销。
TQM可在任何平台上工作 (linux、windows、mac、freebsd、netbsd、solaris/sunos) 在任何控制台或图形用户界面中,也可以使用iPython/Jupyter笔记本电脑。
tqdm 不需要任何依赖项(甚至不需要诅咒!),只是 python和支持 回车的环境 换行符\n 控制字符。
目录
-
安装
- 最新的PYPI稳定版本
- 在github上的最新开发版本
- 最新conda版本
- 最新Snapcraft版本
- 最新的Docker版本
- 变更日志
- 用法
- 基于iterable的
- 手册
- 模块
- 说明和附加统计信息
- 嵌套进度条
- 钩子和回调
- 熊猫集成
- ipython/jupyter integration
- 定制集成
- 动态监视器/仪表
- 正在写入消息
- 重定向写入
- 监视线程、间隔和分钟数
安装
最新的pypi稳定版本
github上的最新开发版本
拉入并安装到当前目录:
pip install -e git+https://github.com/tqdm/tqdm.git@master#egg=tqdm
更改日志
所有更改的列表可在Github的版本中找到: " wiki上的 网站 ,或在爬虫程序(如 allmychanges.com
用法
tqdm是一种非常通用的方法,可以用在很多方面。 下面给出了三个主要参数。
基于表的
将 tqdm() 包裹在任何iterable上:
fromtqdmimporttqdmimporttimetext=""forcharintqdm(["a","b","c","d"]):time.sleep(0.25)text=text+char
trange(i)是tqdm(range)的一个特殊优化实例(i)) :
foriintrange(100):time.sleep(0.01)
循环外的实例化允许手动控制 tqdm() :
fromtqdmimporttqdmforiintqdm(range(10000)):...0
手册
通过使用带有语句的 来手动控制 tqdm() 更新:
fromtqdmimporttqdmforiintqdm(range(10000)):...1
如果可选变量 total (或带有 len() 的iterable)是 如果有,将显示预测性统计信息。
with
也是可选的(您可以将
tqdm()
赋给变量,
但在这种情况下,不要忘记在最后
fromtqdmimporttqdmforiintqdm(range(10000)):...2
模块
也许 tqdm 最棒的用法是在脚本或命令中 线。只要在管道之间插入 tqdm (或 python -m tqdm )就会通过 在打印进程到 stderr 时,通过所有 stdin 到 stdout 。
下面的示例演示了计算所有python文件中的行数 在当前目录中,包括计时信息。
fromtqdmimporttqdmforiintqdm(range(10000)):...3
注意,还可以指定 tqdm 的常用参数。
fromtqdmimporttqdmforiintqdm(range(10000)):...4
备份大目录?
fromtqdmimporttqdmforiintqdm(range(10000)):...5
常见问题和已知问题
最常见的问题是多行输出过多,而不是 一个整洁的单行进度条。
- 一般控制台:需要支持回车( cr , \r )。
- 嵌套进度条:
-
Unicode编码:
- 报告支持Unicode的环境将具有稳定的平滑度 进度条。回退是一个仅限ascii的条。
- Windows控制台通常只部分支持Unicode,因此 通常需要显式的ascii=true (这里还有 )。这是因为 正常宽度的Unicode字符错误地显示为 "宽",或某些Unicode字符未呈现。
- 包装枚举iterables:使用枚举(tqdm(…)而不是 TQM(枚举(…)) 。这同样适用于 numpy.ndenumerate 。 这是因为枚举函数倾向于隐藏iterable的长度。 tqdm 没有。
- 由于内部优化,包装拉链式Iterables也有类似的问题。 tqdm(zip(a,b)) 应替换为 zip(tqdm(a,b) 甚至 压缩(tqdm(a),tqdm(b))
- 在python2中悬挂管道: 当我们在cli上,您可能需要使用python 3.5+来纠正 缓冲。
文档
fromtqdmimporttqdmforiintqdm(range(10000)):...6
参数
< DL>
-
iterable
:
iterable,可选
可以用progressbar装饰。
留空可手动管理更新。
< DL>
-
描述str,可选
ProgressBar的前缀。
< DL>
-
总计
:
int,可选
预期迭代次数。如果未指定,
如果可能,使用len(iterable)。如果浮点("inf")或作为最后一个
度假村,仅显示基本进度统计
(没有预计到达时间,没有进度条)。
如果
gui
为真且此参数需要后续更新,
指定初始任意大正整数,
例如INT(9E9)。
< DL>
-
保留bool,可选
如果[默认值:true],则保留progressbar的所有跟踪
迭代结束时。
如果
无
,则只有当
位置
为
0
时才会离开
< DL>
-
文件
:
io.textiowrapper
或
io.stringio
,可选
指定输出进度消息的位置
(默认值:sys.stderr)。使用
file.write(str)
和
file.flush()
方法。有关编码,请参见
写入字节
< DL>
-
ncols
:
int,可选
整个输出消息的宽度。如果指定,
动态调整progressbar的大小以保持在此范围内。
如果未指定,则尝试使用环境宽度。这个
回退宽度为10米,计数器无限制
统计学。如果为0,则不会打印任何仪表(仅统计)。
< DL>
-
mininterval
:
浮动,可选
最小进度显示更新间隔[默认值:0.1]秒。
< DL>
-
maxInterval
:
浮点,可选
最大进度显示更新间隔[默认值:10]秒。
自动调整
miniters
以对应
miniterval
经过长时间的显示更新延迟。仅在动态模式下有效
或监视器线程已启用。
< DL>
-
miniters
:
int,可选
迭代中的最小进度显示更新间隔。
如果0和
动态参数
,将自动调整为等于
mininterval
(CPU效率更高,适合紧密循环)。
如果>;0,将跳过指定迭代次数的显示。
调整这个并
mininterval
以获得非常有效的循环。
如果在快速和慢速迭代中进度都不稳定
(网络、跳过项目等)应将miniters设置为1。
< DL>
-
ascii
:
bool或str,可选
如果未指定或为false,请使用unicode(平滑块)填充
计程表。回退方法是使用ascii字符"123456789"。
< DL>
-
禁用bool,可选
是否禁用整个progressbar包装器
[默认值:false]。如果设置为"无",则禁用非TTY。
< DL>
-
单位:str,可选
字符串,用于定义每次迭代的单位
[默认值:it]。
< DL>
-
单位刻度
:
bool或int或float,可选
如果为1或真,迭代次数将减少/缩放
自动并在
增加国际单位制标准
(公斤、兆等)[默认值:假]。如果有其他非零
数字,将缩放
总计
和
n
< DL>
动态ncols
:
bool,可选
如果设置,则会不断地将ncols更改为环境(允许
对于窗口大小[默认值:false]。
< DL>
-
平滑
:
浮动,可选
用于速度估计的指数移动平均平滑因子
(在gui模式下忽略)。范围从0(平均速度)到1
(当前/瞬时速度)[默认值:0.3]。
< DL>
-
条形图格式:str,可选
指定自定义条形图字符串格式。可能影响性能。
[默认值:'{l}{bar}{r}',其中
l_bar='{desc}:{百分比:3.0f}%'和
r_bar='{n戆fmt}/{total戆fmt}[{elapsed}<;{remaining},'
"{速率{fmt}{后缀}"
可能的变量:l_bar,bar,r_bar,n,n_fmt,total,total_fmt,
百分比,比率,比率,比率,比率,比率,
rate_inv,rate_inv_fmt,已用,已用,剩余,
剩余时间,描述,后缀,单位。
注意后面的":"在{desc}之后自动删除
如果后者为空。
< DL>
-
初始值
:
int,可选
初始计数器值。重新启动进程时有用
条形图[默认值:0]。
< DL>
-
位置:int,可选
指定打印此栏的行偏移量(从0开始)
如果未指定,则自动。
有助于一次管理多个栏(例如,从线程)。
< DL>
< D>帖子修正dict或
*
,可选
指定要在栏尾显示的其他统计信息。
调用
设置后缀(**postfix)
如果可能(dict)。
< DL>
-
单位除数
:
浮点,可选
[默认值:1000],忽略,除非
单位刻度
为真。
< DL>
-
写入字节
:
bool,可选
如果(默认值:无)和
文件未指定,
字节将用python 2编写。如果
true
也将写入
字节。在所有其他情况下,将默认为Unicode。
可以用progressbar装饰。 留空可手动管理更新。
ProgressBar的前缀。
预期迭代次数。如果未指定, 如果可能,使用len(iterable)。如果浮点("inf")或作为最后一个 度假村,仅显示基本进度统计 (没有预计到达时间,没有进度条)。 如果 gui 为真且此参数需要后续更新, 指定初始任意大正整数, 例如INT(9E9)。
如果[默认值:true],则保留progressbar的所有跟踪 迭代结束时。 如果 无 ,则只有当 位置 为 0 时才会离开
指定输出进度消息的位置 (默认值:sys.stderr)。使用 file.write(str) 和 file.flush() 方法。有关编码,请参见 写入字节
整个输出消息的宽度。如果指定, 动态调整progressbar的大小以保持在此范围内。 如果未指定,则尝试使用环境宽度。这个 回退宽度为10米,计数器无限制 统计学。如果为0,则不会打印任何仪表(仅统计)。
最小进度显示更新间隔[默认值:0.1]秒。
最大进度显示更新间隔[默认值:10]秒。 自动调整 miniters 以对应 miniterval 经过长时间的显示更新延迟。仅在动态模式下有效 或监视器线程已启用。
迭代中的最小进度显示更新间隔。 如果0和 动态参数 ,将自动调整为等于 mininterval (CPU效率更高,适合紧密循环)。 如果>;0,将跳过指定迭代次数的显示。 调整这个并 mininterval 以获得非常有效的循环。 如果在快速和慢速迭代中进度都不稳定 (网络、跳过项目等)应将miniters设置为1。
如果未指定或为false,请使用unicode(平滑块)填充 计程表。回退方法是使用ascii字符"123456789"。
是否禁用整个progressbar包装器 [默认值:false]。如果设置为"无",则禁用非TTY。
字符串,用于定义每次迭代的单位 [默认值:it]。
如果为1或真,迭代次数将减少/缩放 自动并在 增加国际单位制标准 (公斤、兆等)[默认值:假]。如果有其他非零 数字,将缩放 总计 和 n
如果设置,则会不断地将ncols更改为环境(允许 对于窗口大小[默认值:false]。
指定自定义条形图字符串格式。可能影响性能。 [默认值:'{l}{bar}{r}',其中 l_bar='{desc}:{百分比:3.0f}%'和 r_bar='{n戆fmt}/{total戆fmt}[{elapsed}<;{remaining},' "{速率{fmt}{后缀}" 可能的变量:l_bar,bar,r_bar,n,n_fmt,total,total_fmt, 百分比,比率,比率,比率,比率,比率, rate_inv,rate_inv_fmt,已用,已用,剩余, 剩余时间,描述,后缀,单位。 注意后面的":"在{desc}之后自动删除 如果后者为空。
指定打印此栏的行偏移量(从0开始) 如果未指定,则自动。 有助于一次管理多个栏(例如,从线程)。
指定要在栏尾显示的其他统计信息。 调用 设置后缀(**postfix) 如果可能(dict)。
[默认值:1000],忽略,除非 单位刻度 为真。
如果(默认值:无)和 文件未指定, 字节将用python 2编写。如果 true 也将写入 字节。在所有其他情况下,将默认为Unicode。
额外的cli选项
< DL>
-
删除chr,可选
-
定界字符[默认值:'n']。使用"0"表示空值。
注意:在windows系统中,python将"n"转换为"rn"。
< DL>
buf_size
:
int,可选
-
字符串缓冲区大小(字节)[默认值:256]
当指定了
delim
时使用。
< DL>
-
字节
:
bool,可选
-
如果为true,则将计算字节数,忽略delim和default
单位刻度
为真,
单位除数
为1024,
单位
为"B"。
< DL>
-
manpath
:str,可选
-
安装TQM手册页的目录。
< DL>
-
记录str,可选
-
严重致命错误警告(ing)[默认值:"信息"]调试未设置。
示例和高级用法
说明和其他统计信息
自定义信息可以在 tqdm 栏上动态显示和更新 使用 desc 和 postfix 参数:
fromtqdmimporttqdmforiintqdm(range(10000)):...8
使用 {postfix[…]}时要记住的要点以 条形图格式平移 字符串:
- 后缀 也需要作为初始参数在兼容的 格式化,然后
- 后缀 将自动转换为字符串,如果它是类似于dict的 对象。为了防止这种行为,在字典中插入一个额外的项 其中键不是字符串。
其他 bar_format 参数也可以通过重写来定义 格式dict ,并且可以使用ascii修改条本身:
fromtqdmimporttqdmforiintqdm(range(10000)):...9
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]0
注意 {bar} 还支持格式说明符 [宽度][类型]
- 宽度
- 未指定(默认):自动填充ncols
- int>;=0 :固定宽度覆盖 ncols 逻辑
- int<;0 :从自动默认值中减去
这意味着可以使用以下方法创建具有右对齐文本的固定栏: 条形图格式={l_bar}{bar:10}{bar:-10b}右对齐"
嵌套进度条
tqdm 支持嵌套进度条。下面是一个示例:
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]1
在Windows上,如果 可将嵌套条保留在各自的行上。
用于手动控制定位(例如多线程使用)。 您可以指定 位置=n 其中 n=0 作为最外面的条, n=1 下一个,依此类推:
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]2
挂钩和回调
tqdm 可以轻松支持回调/挂钩和手动更新。 下面是一个带有 urllib 的示例:
urllib.urlRetrieve文档
< Buff行情> < div >$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]3
灵感来源于 绳线242 。 功能替代 示例/tqdm_wget.py
建议在有潜在危险时使用 miniters=1 。 迭代速度的巨大差异(例如,通过 不完整的连接)。
熊猫集成
由于受欢迎的需求,我们增加了对熊猫的支持-下面是一个例子 对于 dataframe.progress\u apply 和 dataframegroupby.progress\u apply :
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]4
如果你对它的工作方式感兴趣(以及如何修改它 自己的回调),请参见 示例 文件夹或导入模块并运行 help()
集成ipython/jupyter
ipython/jupyter通过 tqdm_笔记本电脑支持
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]5
除了 tqdm 特性之外,子模块还提供了一个本地jupyter 小部件(与ipython v1-v4和jupyter兼容),完全工作的嵌套条 和颜色提示(蓝色:正常,绿色:完成,红色:错误/中断, 浅蓝色:无预计到达时间);如下所示。
也可以让 tqdm 自动选择 使用 自动笔记本 子模块的控制台或笔记本版本:
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]6
注意,如果在笔记本中运行,则会发出TQDMExpericalWarning 因为不可能区分笔记本电脑 以及Jupyter控制台。使用 自动 而不是 自动记事本 来抑制 此警告。
自定义集成
tqdm 可以从继承来创建自定义回调(与 tqdmupto 以上示例 )或自定义前端 (例如,gui,如笔记本或绘图包)。在后一种情况下:
-
def\uu init\uu()
调用
super()。
gui=true) 禁用 终端 状态打印机 创建。 - 重新定义: close() , clear() , display()
考虑重载 display() 以使用例如 self.frontend(**self.format\u dict) 而不是 self.sp(repr(self))
动态监视器/仪表
您可以使用 tqdm 作为不是单调递增的仪表。 这可能是因为 n 减少(例如cpu使用监视器)或 总计 变化:
一个例子是递归搜索文件。 总计是 目前发现的对象数,而 n 是 是文件(而不是文件夹):
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]7
使用 update(0) 是让 tqdm决定何时触发 显示刷新以避免控制台垃圾邮件。
监视线程、间隔和分钟数
tqdm 实施一些技巧来提高效率和减少开销。
- 避免不必要的频繁条刷新: mininterval 定义多长时间 在每次刷新之间等待。TQM总是在后台更新, 但它将只显示每一个 mininterval
- 减少呼叫次数以检查系统时钟/时间。
- mininterval 比 miniters 更易于配置。 一个聪明的调节系统会自动调节 miniters 到适合时间的迭代次数 mininterval 。 实际上,tqdm将检查是否是打印的时候而不是实际打印 检查时间。手动设置仍然可以绕过此行为 迷你车
然而,考虑一个具有快速和慢速迭代组合的情况。 经过几次快速迭代后, dynamic_miniters 将把 miniters 设置为 数量很大。当迭代速度随后减慢时, miniters 将 保持较大,从而减少显示更新频率。解决这个问题:
- maxInterval 定义显示刷新之间的最长时间。 并发监视线程检查过期的更新并强制执行 必要时。
监视线程不应该有明显的开销,并且保证
默认情况下,至少每10秒更新一次。
通过设置
任何
编写消息
由于TQM使用简单的打印机制来显示进度条, 在 ProgressBar已打开。
在终端中写入消息而不与 tqdm bar发生任何冲突 display,提供一个 .write() 方法:
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]8
默认情况下,这将打印到标准输出 sys.stdout 。但是你可以 使用 file 参数指定任何类似文件的对象。例如,这个 可用于将写入的消息重定向到日志文件或类。
重定向写入
如果使用可以将消息打印到控制台的库,请编辑该库 将 print() 替换为 tqdm.write() 可能不可取。 在这种情况下,可以将sys.stdout重定向到tqdm.write() 。
若要重定向sys.stdout,请创建一个将写入
任何输入字符串到
tqdm.write()
,并提供参数
下面给出了一个可重用的规范示例:
$ seq 9999999| tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s]9999999 $ 7z a -bd -r backup.7z docs/ | grep Compressing |\ tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log 100%|███████████████████████████████▉|8014/8014 [01:37<00:00, 82.29files/s]9
贡献
所有源代码都托管在 github 。 欢迎投稿。
见 贡献 有关详细信息,请存档。
做出重大贡献的开发商,按 loc (幸存的代码行, git fame -wmc ), 是:
<表> < COLGROUP > < COL/> < COL/> < COL/> < COL/> <广告> 名称 < <到其他语言的端口
列表位于 此wiki页