Python在Console下显示文本进度条的方法

在用处理耗时的任务时,往往希望能够了解到任务当前的处理进度,这个时候需要在任务中不断打印出任务的进度信息。一般我们是这样的:

def process_mission():
    """ 任务处理方法 """
    # 这里是任务处理过程
    print('当前处理到第[%d]项' % count)
    # 这里是任务处理过程 

 这种方式会在输出一堆类似下面这样的信息:

当前处理到第1项
当前处理到第2项
当前处理到第3项
当前处理到第4项
当前处理到第5项
....

这种信息有可能非常非常的长,也有可能输出的时候非常非常的快,以至于根本就无法看清楚(输出非常快的时候)。

这时候,我们期待这样的功能:

[==================             ] 25.60%

但如果纯粹的使用print是无法达到效果的,会变成和前面一样,满屏都是这种杠杠。

如何正确显示呢?

Python提供了一个模块,叫:progressbar,当使用这个模块之后,你要显示进度的仅需如下:

import progressbar

# 先定义一个进度条
# http://blog.useasp.net/

pbar = progressbar.ProgressBar(maxval=100, \
    widgets=[progressbar.Bar('=', '[', ']'), ' ', \
    progressbar.Percentage()])
for i in xrange(100):
    # 更新进度条
    pbar.update(i+1)

pbar.finish()
# Ok,到此完结。

 是不是很容易就完成进度条的显示?不过遗憾的是,这个python模块并不是默认的,而是需要安装:

pip install progressbar

如果没有安装pip可以参考这里 。

对于只要一个简单进度条的人来说,安装个python包似乎有点动静太大,那么,自己动手写一个便是了。

下面是Mitchell自己写的一个类似的进度条,不用安装包,简单易用。

# 在使用本方法之前,请先做如下import
# from __future__ import division
# import math
# import sys
# ##blog.useasp.net##

def progressbar(cur, total):
    percent = '{:.2%}'.format(cur / total)
    sys.stdout.write('\r')
    sys.stdout.write("[%-50s] %s" % (
                            '=' * int(math.floor(cur * 50 / total)),
                            percent))
    sys.stdout.flush()

说明:

cur, total:一个是当前值,一个是总值。cur在任务的处理过程中会不断向total靠近,直到两者相等,任务结束

需要注意的是,这两个可能为整型,因此要引入division

在使用的时候,只需要调用即可在控制台输出进度条。

# 调用方式举例
progressbar(2, 100)
progressbar(3.9, 10)
progressbar(3283, 27379)

 到此,我们完成了一个会在控制台动态更新的进度条。

Saturday, February 13, 2016 | 其他技术

文章评论

No comments posted yet.

发表评论

Please add 7 and 7 and type the answer here:

关于博主

  一枚成分复杂的网络IT分子,常年游弋于电子商务,属于互联网行业分类中的杂牌军。当前正在待业中...