在處理程序打進度條時,希望不換行顯示進度,可以使用sys.stdout相關函數來進行處理。
1.print 輸出不換行
首先可以使用print函數來整體輸入,利用,結尾就可以在同一行內顯示:
# python=2.7,py3.x print要加括號
for i in range(10):
print i,
>>> 0 1 2 3 4 5 6 7 8 9
但是這種方法只能在一行里連續輸出,並且只能在換行時候才顯示出來。
2.sys.stdout進行實時顯示
為了進行實時顯示,我們需要利用sys.stdout來實現。
import sys
for i in range(10):
sys.stdout.write(str(i))
sys.stdout.flush()
# 輸出連續的字符
>>> 0123456789
# 可以利用這個做一個進度條:
sys.stdout.write('Processing>>>')
for i in range(10):
sys.stdout.write('*')
sys.stdout.flush()
>>> Processing>>>**********
但是這種方法輸出的是不斷累加的,進度條會不斷增加。如果想要輸出百分數不斷刷新精度就需要利用額外的方法了。
3.回車或退格符的使用
stdout.write將需要寫的內容放到緩存里,而后flush來進行刷新。為了不換行不疊加的顯示前文的信息,我們可以利用\r將光標移到行首,然后將前面的輸出覆蓋即可顯示新的內容:
for i in range(10):
sys.stdout.write(str(i)+'\r')
sys.stdout.flush()
time.sleep(0.5)
# 將依次輸出0~9十個數字
>>> 9
# 我們可以輸出對應的百分數進度
for i in range(10):
sys.stdout.write(str(i+1/1*10)+'%\r')
sys.stdout.flush()
time.sleep(0.5)
# 將依次輸出10%~100%
>>> %100
# 稍微改造一下就是很好看的進度條
for i in range(10):
bar_str = i * '>'
sys.stdout.write(str((i+1)/1*10)+'%' + bar_str + '\r')
sys.stdout.flush()
time.sleep(0.5)鄭州婦科醫院哪家好 http://www.zzkedayy.com/
# 可以直接copy上面的代碼就可以輸出下面的進度條樣式,在同一行中刷新百分數,延長進度符號
>>> 100%>>>>>>>>>
除了使用\r外,還可以使用退格符號\b在進度條后進行刷新:
for i in range(10):
sys.stdout.write('*->'+ '\b\b') #為了不斷加長中間的*,需要先將->刪除再寫入
sys.stdout.flush()
time.sleep(0.5)
# 帶箭頭的進度條
>>> **********->
# 最后把百分數也加上
for i in range(10):
bar_str = i * '*' + '->'
sys.stdout.write(str((i+1)/1*10)+'%' + bar_str + '\b\b\r')
sys.stdout.flush()
time.sleep(0.5)
# 刷新百分數和逐漸增長的進度條:
>>> 100%*********->
