Python:print打印进度条

Python 专栏收录该内容
181 篇文章 4 订阅

原文地址

参考文献

Python:print()

  • 一个最简单的实现[ 198 / 198]
import time

def bar(now, total):
    print('\r[ %d / %d]' % (now, total), end='')
    # print('\r[ {} / {}]'.format(now, total), end='')	# 另一种格式化输出的写法
    
all = 198
for i in range(all):  # i属于[0, total)
    bar(i+1, all)
    time.sleep(0.005)	# 为了更好的观察效果,稍微延时一下
    
# Output:
# [ 198 / 198]

其中

\r表示print的时候,从行首开始打印

end=''指定print()方法以空字符结尾,默认是换行符

  • 加一个前置说明progress:[ 198 / 198]

进度条之前通常会加一个前置说明,诸如‘完成进度’之类的,在上面的代码中,如果在bar()方法之外,会发现怎么加都不合适,都会破坏在单行内打印进度条的效果。这就是因为print()中\r的存在,但是它又是必要的。最后我把这个前置说明封装在了bar()方法的参数列表中,将这个说明拼接进print()语句,就能很好的显示了。

def bar(now, total, prefix='progress:'):
    print('\r'+prefix+'[ %d / %d]' % (now , total), end='')
    # print('\r'+prefix+'[ {} / {}]'.format(now, total), end='')	# 另一种格式化输出的写法
  • 百分比进度progress:[ 100.00% ]
def bar2(now, total, prefix='progress:'):
    print('\r'+prefix+'[ %.2f%% ]' % (now / total * 100), end='')
  • 进度条progress: 70.71% [>>>>>>>>>>>>>>>>>>>>>--------]

要打印进度条,我有给bar方法加了一个length的参数,为的是能控制进度条的总长度

def bar3(now, total, length=30, prefix='progress:'):
    print('\r'+prefix+' %.2f%%\t' % (now / total * 100), end='')
    print('['+'>'*int(i/total*length)+'-'*int(length-i/total*length)+']', end='')

其中str*int的操作,举个例子来说明

print('>'*6)	# 结果就是'>>>>>>'

Output
>>>>>>
  • 完整代码
import time

def bar(now, total):
    print('\r[ %d / %d]' % (now, total), end='')
    # print('\r[ {} / {}]'.format(now, total), end='')

# progress:[127 / 300]
def bar1(now, total, prefix='progress:'):
    print('\r'+prefix+'[ %d / %d]' % (now , total), end='')
    # print('\r'+prefix+'[ {} / {}]'.format(now, total), end='')

# progress:[32.38%]
def bar2(now, total, prefix='progress:'):
    print('\r'+prefix+'[ %.2f%% ]' % (now / total * 100), end='')

# progress: 70.71%	[>>>>>>>>>>>>>>>>>>>>>--------]
def bar3(now, total, length=30, prefix='progress:'):
    print('\r'+prefix+' %.2f%%\t' % (now / total * 100), end='')
    print('['+'>'*int(i/total*length)+'-'*int(length-i/total*length)+']', end='')

if __name__ == '__main__':
    all = 198

    for i in range(all):  # i属于[0, all),所以要在bar中传参i+1而不是i
        # bar(i+1, all)
        # bar1(i+1, all)
        # bar2(i+1, all)
        bar3(i+1, all, 60, '进度:')
        time.sleep(0.005)   # 为了更好的观察效果,稍微延时一下
  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值