Python 输出命令行进度条

在使用 pip 安装时,你会发现有下载进度条,咱们也能够借助开源的第三方库来实现这个功能,在项目输出时增长一些可视化效果。

一个简单易用的第三方库是:progresspython

做者提供了动图很直观地展示了实现的全部输出。git

 

这个库实现了两类样式,一类是有终点的进度条样式,另外一类是多用于加载的转圈样式。程序员

import time
from progress.bar import Bar

bar = Bar('Processing', max=100, fill='@', suffix='%(percent)d%%')
for i in range(100):
    time.sleep(0.1)
    bar.next()
bar.finish()

参数定义的功能:github

  • max: 进度条最大进度
  • fill:进度条填充的字符
  • suffix:百分比的样式

运行上述代码会获得输出编程

Processing |@@@@@@                          | 20%

同时也提供上下文的用法(须要用 Github 里的源代码):微信

with Bar('Processing', max=20) as bar:
    for i in range(20):
        # Do some work
        bar.next()

 

另外一类转圈样式,用法和Bar相似,只要没达到终点就一直调用next方法便可app

from progress.spinner import Spinner

spinner = Spinner('Loading ')
while state != 'FINISHED':
    # Do some work
    spinner.next()

 

动图里的全部样式都是做者已经实现的派生类,用法基本都同样,固然也能够继承基础类来本身实现更多的功能。url

class SlowBar(Bar):
    suffix = '%(remaining_hours)d hours remaining'
    @property
    def remaining_hours(self):
        return self.eta // 3600

上面介绍的库,实现的功能很简单,并且默认只能输出到终端。spa

若是有更复杂的使用场景,推荐使用另外一个库:python-progressbar.net

这个库实现了更多功能,能够自定义组合出一个进度条样式,还能够指定输出流。

 

基本的使用很简单,能够直接传入迭代对象。

import time
import progressbar

for i in progressbar.progressbar(range(100)):
    time.sleep(0.02)

输出以下:

70% (70 of 100) |################       | Elapsed Time: 0:00:01 ETA:   0:00:00

 

也能够生成对象后调用update方法 。

import time
import progressbar

bar = progressbar.ProgressBar(max_value=100)
for i in range(100):
    time.sleep(0.1)
    bar.update(i)

 

最有特色之处就是能够自定义组件,好比咱们来实现相似于动图中转圈加载的样式。

import time
import progressbar

widgets = [
    'Loading: ',
    '[', progressbar.AnimatedMarker(), ']',
    ' ',
    progressbar.Timer()
]
bar = progressbar.ProgressBar(
    widgets=widgets, max_value=progressbar.UnknownLength)

for i in range(100):
    time.sleep(0.5)
    bar.update(i)

输出样式是这样的,方括号中的会一直旋转

Loading: [\] Elapsed Time: 0:00:13

 

更多功能再也不赘述,能够查看 Github 中的文档

 

欢迎关注

微信公众号:面向人生编程

编程思惟不该只存留在代码之中,更应伴随于整我的生旅途,这个公众号不仅聊技术,还会聊产品/互联网/经济学等普遍话题,因此也欢迎非程序员关注。

相关文章
相关标签/搜索