简约且Python风格的进度条
项目描述
Progressist
简约且Python风格的进度条。
安装
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 查看哈希值)