Python的print函數實現進度條效果的覆蓋輸出的操作

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章