如何用Python写个文本进度条?
小Bob 小Bob Bob来啦
2020年09月04日 21:11 __ _ _ _ _

点击上方「 蓝字 」关注”程序员Bob”
每天与你不见不散!

每日一句,送给最珍贵的你:
知行合一!
往日推荐: Python字符串及Time库介绍

程序员Bob(ID:gh_8a1a1530d0bf) 第218次推文 图源:小张
昨天我们学到了Python中Time库的使用,今天就可以开始用Time库完成进度条的操作啦!
进度条-反映某一事件的运行状态
文本进度条: 采用字符串方式打印可以动态变化的文本进度条,且在一行中能够逐渐变化。
其实学过进度条的就知道进度条其实只是一个模拟化的持续进程,但也在一定程度上能够反映运行的一个进度情况。
在这里我们需要用到Time库中的 sleep函数 ,用它来模拟持续化进程。
比如下面这段代码就演示了一个简单的进度条实例:
import time #调用Time库scale = 10 #定义文本进度条大概的宽度为10print("------执行开始------")for i in range(scale+1): #引入一个for循环 a='*'*i #动态变化的* b='.'*(scale-i) #动态变化的. c=(i/scale)*100 #输出进度条的百分比 print("{:^3.0f}%[{}-{}]".format(c,a,b)) time.sleep(0.1)print("------执行结束------")
运行结果:

上面提到的是简单的文本进度条,其实用得更多还是 单行动态刷新的文本进度条
,即会在显示文本进度条时即时刷新——用后打印的字符信息覆盖之前打印的信息。
单行动态刷新的关键是\r。
刷新的本质是用后打印的字符覆盖之前的字符;
且不能换行:在用print时控制输出;
要能回退:打印后光标退回到之前的位置\r。
初始版本如下:
import timefor i in range(101): print("\r{:3}%".format(i),end=" ") #\r让光标返回到行首;end=" "让光标不进行换行操作 time.sleep(0.1)
运行结果(两张为连续变化):


最终版本:
import timescale = 50print("执行开始".center(scale//2,"-"))start=time.perf_counter() #记录打印开始的时间for i in range(scale+1): a='*'*i b='.'*(scale-i) c=(i/scale)*100 dur=time.perf_counter()-start print("\r{:^3.0f}%[{}-{}]{:.2f}s".format(c,a,b,dur),end=' ') #增加了dur变量,用来记录打印文本进度条所消耗的时间。 time.sleep(0.1)print("\n"+"执行结束".center(scale//2,'-'))
运行结果 (两张为连续变化) :


未完待续…

往期推荐:
Python字符串及Time库介绍 2020-09-03
如何一个月过英语四级? 2020-09-02
八月碎碎念 || 每一次尝试,我们都得努力坚持 2020-08-31
为你,千千万万遍.
关注 程序员Bob 公众号, 与你 一起终 生学习

一键三连,就差你了
预览时标签不可点
阅读
修改于
__
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小Bob的博客!











