Python - 控制台显示进度条

我们在写一些python程序时,如果程序运行时间较长,我们希望能够有一个进度条来动态的展示程序运行进度。

首先能想到的做法是用print将执行到第几步打印出来,但这样显然不是我们想要的进度条,显示进度占用了很多行,原因是print在末尾默认加上了”\n”换行符。详见《你应该知道的print》

我们对进度条的需求:一是进度信息在一行中显示;二是每次都能够动态擦除一行中上一次的内容。那么很自然的想到print有没有相应的转义符,还真有这么一个,”\r”。

import time
N = 1000
for i in range(N):
    print("进度:{0}%".format(round((i + 1) * 100 / N)), end="\r")
    time.sleep(0.01)

输出格式:
100%

进度显示的问题解决了,有时候我们需要有一些时间方面的显示;例如已经耗费了多长时间,预计还剩下多少时间等。

import time
N = 1000
st = time.clock()
for i in range(N):
    p = round((i + 1) * 100 / N)
    duration = round(time.clock() - st, 2)
    remaining = round(duration * 100 / (0.01 + p) - duration, 2)
    print("进度:{0}%,已耗时:{1}s,预计剩余时间:{2}s".format(p, duration, remaining), end="\r")
    time.sleep(0.01)

输出格式:进度:100%,已耗时:10s,预计剩余时间:10s

上面代码中计算remaining时p加上了0.01,是为了避免除0问题。

至此,控制台进度条可以工作了,但代码在不同地方使用时会比较冗余,理解了原理,可以封装成一个库。

实际上早就有人已经做好这个工作了,而且功能更加强大丰富。这里推荐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)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python控制台进度条可以通过在循环中使用特定字符来显示进度。以下是两种简单的源代码来显示控制台进度条: 代码1: ```python import time for i in range(1, 101): print('\r' + '▋' * i + '当前进度:{}%'.format(i), end='') time.sleep(0.3) ``` 这段代码使用`\r`来回车到行首,然后使用`▋`字符来表示进度条进度,最后使用`format()`函数将当前进度百分比插入到字符串中。 代码2: ```python import sys import time for i in range(1, 101): sys.stdout.write('\r' + '▋' * i + '当前进度:{}%'.format(i)) sys.stdout.flush() time.sleep(0.3) ``` 这段代码使用`sys.stdout.write()`来在同一行输出进度条,然后使用`sys.stdout.flush()`来立即刷新输出,以便显示进度条的更新。 您可以根据需要选择其中一种代码来实现控制台进度条效果。希望对您有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python实现控制台输出文本进度条](https://blog.csdn.net/m0_46653437/article/details/109152688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【Python实用工具】用Python控制台输出进度条](https://blog.csdn.net/qq_41823684/article/details/118578754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值