跳转到主要内容

简约且Python风格的进度条

项目描述

Build Status PyPI Coverage Status PyPI

Progressist

简约且Python风格的进度条。

asciicast

安装

pip install progressist

使用

from progressist import ProgressBar
bar = ProgressBar(total=mytotalstuff)
for item in mystuff:
    # do_stuff
    bar.update()

或者使用 bar.iter 来透明地操作

for item in bar.iter(mystuff):
    do_stuff

它自带了默认渲染,足以开始使用,但它设计得非常容易定制:只需编写一个模板字符串

bar = ProgressBar(total=mytotalstuff, template='{prefix} {progress} ETA: {eta}')

它是纯Python 格式化,因此您可以使用任何有效的字符串格式化来控制外观。例如

bar = ProgressBar(total=mytotalstuff, template='{progress} {percent:.2%} ETA: {eta:%H:%M:%S}')

您也可以更改填充字符

bar = ProgressBar(total=mytotalstuff, done_char='#')

您还可以更改进度逻辑本身,例如使用旋转器(包含在内)

bar = ProgressBar(total=mytotalstuff, progress='{spinner}')
# 'progress' kwarg must return a valid template variable.
# included ones are {bar} and {spinner}

您可以一次增加多个步骤

for item in mystuff:
    amount = do_stuff()
    bar.update(step=amount)

您可以通过继承ProgressBar来添加更多模板变量

class MyBar(ProgressBar):

    @property
    def swap(self):
        return psutil.swap_memory().total

bar = MyBar(total=20, template='{prefix} {progress} Swap usage: {swap}')

如果您在不同的地方使用相同的配置,创建一个子类并将其配置作为类属性设置

class MyBar(ProgressBar):
    template = ('Download |{animation}| {done:B}/{total:B}')
    done_char = '⬛'

bar = MyBar()

您想自己计算已完成部分吗?

bar.update(done=myvar / othervar * another)

或者目标总数在过程中可能会改变?

bar.update(total=newcomputedtotal)

用作urlretrieve回调

bar = ProgressBar(template="Download |{animation}| {done:B}/{total:B}")
urllib.request.urlretrieve(myurl, mydest, reporthook=bar.on_urlretrieve)

查看示例以获取灵感。

要运行示例,在git克隆仓库后,只需运行

python examples.py

如果您只想运行一个示例,请将其名称添加到命令行

python examples.py example_download

参数

您可以通过类属性、初始化或更新来设置所有这些参数

class MyBar(ProgressBar):
    done_char = 'x'

bar = Bar()

或者在初始化时

bar = ProgressBar(done_char='x')

或者在更新时

bar = Bar()
bar.update(prefix='Finishing')
名称 默认 描述
done_char = 用于填充进度条的字符
remain_char ' '(一个空格) 用于填充进度条空余部分的字符
模板 {prefix} {progress} {percent} ({done}/{total}) 整行模板
prefix 进度 前缀标签
动画 '{progress}' 用于进度的实际小部件,可以是 {bar}{spinner}{stream}
throttle 0 两次 update 调用之间发布渲染的最小值:可以接受一个 int 用于绝对节流,一个浮点数用于百分比节流(必须设置 total)或一个 timedelta 用于秒节流

内置模板变量

名称 描述 type 默认格式化
prefix 默认模板中的前缀标签 字符串 str
elapsed 从第一次迭代开始经过的时间(以秒为单位) int 作为 timedelta
eta 计算出的 ETA datetime 如果小于 24 小时,则为 %H:%M:%S,否则为 %Y-%m-%d %H:%M:%S
tta 估计的剩余时间(到达时间;以秒为单位) int 作为 timedelta
avg 每次迭代的平均时间,以秒为单位 float .2f
speed 每秒迭代的平均次数 float .2f
done 已完成的迭代次数 整数
total 要完成的迭代总数 整数
remaing 剩余要完成的迭代次数 整数
percent 已完成的迭代百分比 float .2%
动画 实际的进度条 模板字符串(《bar》)、《spinner》或《stream》)

自定义格式化

我们扩展了 python 默认的 Formatter,添加了一些有用的自定义规范

  • B 类型:将 int 以人性化的字节数显示。例如

      > bar.total = 109830983
      > bar.template = '{total:B}'
      > bar.render()
      '104.7 MiB'
    

    您仍然可以覆盖 ndigits 值

      > bar.total = 109830983
      > bar.template = '{total:0.2B}'
      > bar.render()
      '104.74 MiB'
    
  • D 类型:尝试转换为整数。例如

      > bar.speed = 103.23
      > bar.template = '{speed:D}'
      > bar.render()
      '103'
    

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

progressist-0.1.0.tar.gz (6.4 kB 查看哈希值

上传时间

构建分布

progressist-0.1.0-py3-none-any.whl (6.2 kB 查看哈希值

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面