版權聲明:轉載請註明作者(獨孤尚良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——著