快速、可扩展的进度表

tqdm的Python项目详细描述


全面质量管理

pypi版本 >>>马克" rel="nofollow"> pypi statusSnapcraft

生成状态 <<<< codacy等级库排名pypi下载doi许可证openhub statusbinder demoawesome 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 >
screenshot
回复:ptpython

它也可以作为带有管道的模块执行:

$ 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稳定版本

pypi statusPYPI下载库依赖项

github上的最新开发版本

github状态github starsgithub提交github分叉github已更新

拉入并安装到当前目录:

pip install -e git+https://github.com/tqdm/tqdm.git@master#egg=tqdm

最新的conda版本

conda forge状态

最新Snapcraft版本

Snapcraft

snap install tqdm

最新的Docker版本

码头工人

docker pull tqdm/tqdm
docker run -i --rm tqdm/tqdm --help

更改日志

所有更改的列表可在Github的版本中找到: 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() 赋给变量, 但在这种情况下,不要忘记在最后 del close()

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

常见问题和已知问题

github问题

最常见的问题是多行输出过多,而不是 一个整洁的单行进度条。

如果遇到任何其他困难,请浏览并归档 github问题

文档

pypi版本自述点击数 (自2016年5月19日起)

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。

额外的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)[默认值:"信息"]调试未设置。

返回

  • 输出:修饰的迭代器。
fromtqdmimporttqdmforiintqdm(range(10000)):...
7

示例和高级用法

说明和其他统计信息

自定义信息可以在 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 :从自动默认值中减去
  • 类型
  • a :ascii( ascii=true 覆盖)
  • u :unicode( ascii=false 覆盖)
  • b :空白( ascii="" 覆盖)
  • 这意味着可以使用以下方法创建具有右对齐文本的固定栏: 条形图格式={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兼容),完全工作的嵌套条 和颜色提示(蓝色:正常,绿色:完成,红色:错误/中断, 浅蓝色:无预计到达时间);如下所示。

    屏幕截图-jupyter1screenshot-jupyter2screenshot-jupyter3

    也可以让 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 作为不是单调递增的仪表。 这可能是因为 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秒更新一次。 通过设置 任何 tqdm 实例(即 t= tqdm.tqdm(…); t.monitor_interval=2 )。 监视器线程可以通过设置在应用程序范围内禁用 tqdm.tqdm.monitor_interval=0 在实例化任何 tqdm 条之前。

    编写消息

    这是一项正在进行的工作(请参见 737 )。

    由于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() ,并提供参数 ile=sys.stdout,dynamic\u ncols=true

    下面给出了一个可重用的规范示例:

    $ 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提交github问题github prsopenhub statusgithub贡献

    所有源代码都托管在 github 。 欢迎投稿。

    贡献 有关详细信息,请存档。

    做出重大贡献的开发商,按 loc (幸存的代码行, git fame -wmc ), 是:

    <表> < COLGROUP > < COL/> < COL/> < COL/> < COL/> <广告> 名称 < < LOC/< 注释 < /广告> <正文> 卡斯珀·达·科斯塔·路易斯 casperdcl ~3/4 主要维护者src="https://warehouse-camo.cmh1.psfhosted.org/5c2a05e42abfe9e4032d5AF4C0882CBF7D850521/6874747470733A3222222F696D6272E736869656C66736363636363636363636363662626262626262626766676667626262626262626262626262626262626262626265363636366262626266666666666666666666666662626262626262666666666666666636363636363636363636363636363636363636363636363636363636363636363636363636363636363D2532342号E2E73756D2675726C3D687477470732533412532426256361737065727363692E756B2E746F25324667966732E6A736F6E"/> 斯蒂芬拉罗克 lrq3000 约10% 团队成员 凯尔·阿尔滕多夫 altendky >2%</td> > 陈光硕 城市 >1%</td> > 马修·史蒂文斯 mjstevens777 >1%</td> > 诺姆·约拉夫·拉斐尔 noamraph >1%</td> 原作者 哈德里安·玛丽 hadim >1%</td> 团队成员 米哈伊尔·科罗波夫 kmike >1%</td> 团队成员 < > <表>

    源站-0sourcerer-2sourcerer-3sourcerer-5sourcerer-7

    到其他语言的端口

    列表位于 此wiki页

    许可证

    开放源代码(OSI批准): 许可证

    引文信息: doi (出版) doi代码 (代码)

    自述点击数 (自2016年5月19日起)

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java JavaFX触控事件未触发Ubuntu 20.04触控笔记本电脑   java如何在AWT中关闭窗口?   java Dagger 2:注入具有构造函数参数的成员   创建对象的Java调用类   对象我想在A.java中添加两个数字,并在B.java中打印结果(如何?)   java如何使用AWS SDK for Android从数字海洋空间下载图像?   java Facebook sdk 4.0.1无法使用Android studio获取某些字段   4分钟后web应用程序(Angular 8和Rest API)中的java自动会话超时   在Eclipse for Java EE developers edition中禁用HTML警告   java按字母顺序排列字符串我错过了什么明显的东西吗?   java在Jshell中println和printf有什么不同