zoukankan      html  css  js  c++  java
  • Python 输出命令行进度条

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

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

    作者提供了动图很直观地展现了实现的所有输出。

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

    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()
    

    参数定义的功能:

    • 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方法即可

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

    动图里的所有样式都是作者已经实现的派生类,用法基本都一样,当然也可以继承基础类来自己实现更多的功能。

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

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

    如果有更复杂的使用场景,推荐使用另一个库:python-progressbar

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

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

    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 中的文档

    欢迎关注

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

    编程思维不应只存留在代码之中,更应伴随于整个人生旅途,这个公众号不只聊技术,还会聊产品/互联网/经济学等广泛话题,所以也欢迎非程序员关注。

  • 相关阅读:
    学了这些,你就算入门DIV+CSS了(转)
    【转】Web service是什么?
    [转]MongoDB插入和查询操作
    【转】安装m2e最佳方案
    XDS框架基本事务及其Soap消息实例
    数据表改变之后数据的迁移
    HL7 PID (Patient Identification) Segment(HL7规定的PID字段)
    海量数据库的设计
    【转】基于Axis2开发WebService
    【转】JAVA 调用Web Service的方法
  • 原文地址:https://www.cnblogs.com/zkqiang/p/10515134.html
Copyright © 2011-2022 走看看