每日一句,送给最珍贵的你:
知行合一!
往日推荐: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,'-'))
运行结果(两张为连续变化):
未完待续...