[Python]如何在控制台显示进度条

我们在写一些python程序时,如果程序运行时间较长,我们希望能够有一个进度条来动态的展示程序运行进度。首先,能想到的做法是用print将执行到第几步打印出来,但这样显然不是我们想要的进度条,显示进度占用了很多行,原因是print在末尾默认加上了”\n”换行符。

我们对进度条的需求:一是进度信息在一行中显示;二是每次都能够动态擦除一行中上一次的内容。

这里推荐progressbar,下载地址为https://pypi.python.org/pypi/progressbar2

简单用法1

import time
import progressbar
p = progressbar.ProgressBar()
N = 1000
for i in p(range(N)):
    time.sleep(0.01)

简单用法2

import time
import progressbar
p = progressbar.ProgressBar()
N = 1000
p.start(N)
for i in range(N):
    time.sleep(0.01)
    p.update(i+1)
p.finish()

两种简单用法的输出格式都是:
100% (1000 of 1000) |#####################| Elapsed Time: 0:00:10 Time: 0:00:10
包含了百分百进度,数量进度,#号前进条,耗费时间,剩余时间。

高级点的用法(自己配置输出格式)

import time
import progressbar
bar = progressbar.ProgressBar(widgets=[ ' [', progressbar.Timer(),
         '] ',progressbar.Percentage(),' (', progressbar.ETA(), ') ',])
for i in bar(range(1000)):
    time.sleep(0.01)

输出格式:
[Elapsed Time: 0:00:10] 100% (Time: 0:00:10)

主要方式有如下几种,可自由搭配:

'Timer',          # 计时器
'ETA',            # 预计剩余时间
'AbsoluteETA',    # 预计结束的绝对时间,耗时很长时使用较方便
'Percentage',     # 百分比进度,30%
'SimpleProgress', # 计数进度,300/1000
'Counter',        # 单纯计数
'Bar'             # “#”号进度条
import time
import progressbar
bar = progressbar.ProgressBar(widgets=[
    progressbar.Percentage(),
    ' (', progressbar.SimpleProgress(), ') ',
    ' (', progressbar.AbsoluteETA(), ') ',])
for i in bar(range(1000)):
    time.sleep(0.01)

输出示例:
54% ( 545 of 1000) (Estimated finish time: 2016-11-06 19:26:15)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,239评论 4 16
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,550评论 0 17
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,184评论 6 13
  • 背景提要 今天写一个简单的自定义控件,实现宽固定,高度根据自定义宽高比例自动调整;或高固定,宽度随比例调整。其中有...
    代码咖啡阅读 1,022评论 0 5
  • 细雨淋湿的小路 湿漉着 小雨打落的槐花 明丽着 湿哒哒里闲闲行 慢悠悠里静静看 长长小路捡拾一路槐花 静谧 是此刻...
    乌鸦一只阅读 150评论 0 0