版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/103032555
一直以来,羡慕那种在shell窗口执行操作时候同行覆盖输出的进度条那种操作,比如完成状态是10个*,那么在执行操作时候,会始终输出一行,在这一行慢慢地由1个星号到10个星号的动态变化。可惜,不知道怎么操作,只好暂定为输出10行。
无意发现了这种操作:
import time
for i in range(10):
print(i,end='\r')
time.sleep(1)
关键在于end=‘\r’,但这个需要配合sleep使用,不然你看不到东西。
所以下图这种许多行的状态显示输出就可以say bye了。取而代之的,是一个不断变长的进度条。
引申:如果不修改已经打印的内容,比如不是在同一个位置更新时间或百分比的数值的情况下,如果只是输出一个个的*号,还有其他方法么?设想代码如下:
import time
for i in range(1,10):
print('*',end='')
time.sleep(1)
每隔一秒我追加打印一个*可以吗?
很遗憾,上面的代码,是起初一直不显示,到最后全部显示出来。
为什么这样呢?我猜测可能是print这个函数的问题,如果end不是默认的'\n'或者我没设置的'\r'这类,print函数可能是攒一波再输出,所以无论end是''还是'\t',' '这种,都是最后一次性输出。
2019年11月17日,有高人(飞龟道人/尘空和尚:https://me.csdn.net/weixin_40450867)发展了下代码:
import time
for i in range(1,20):
print("█" * i + "%*.*s" %(42-2*i,5,int(i * 100 / 19)) + "%", end='\r')
time.sleep(1)
print("\n")
这是有进度条和百分比动态更新的。如下图所示:
飞龟道人/尘空和尚的经验:如果不在cmd,软件编辑器直接运行的话,下图这里可以显示。
(注意:提供思路,要学会举一反三,此类代码我是在cmd运行Python所得,经实践检验,pycharm执行看不到效果。)
感谢飞龟道人/尘空和尚的完善发展。
独孤尚良dugushangliang——著