歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python顯示進度條的實現方法

首先,推薦一個組件:progressive

效果如下:

進度條和一般的print區別在哪裡呢?

答案就是print會輸出一個\n,也就是換行符,這樣光標移動到了下一行行首,接著輸出,之前已經通過stdout輸出的東西依舊保留,而且保證我們在下面看到最新的輸出結果。

進度條不然,我們必須再原地輸出才能保證他是一個進度條,否則換行了怎麼還叫進度條?

最簡單的辦法就是,再輸出完畢後,把光標移動到行首,繼續在那裡輸出更長的進度條即可實現,新的更長的進度條把舊的短覆蓋,就形成了動畫效果。

可以想到那個轉義符了吧,那就是 \r。

轉義符\r就可以把光標移動到行首而不換行,轉義符\n就把光標移動到行首並且換行。

在python中,輸出stdout(標准輸出)可以使用sys.stdout.write
例如:

#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
#Author: [email protected]
##2010-10-27 22:07
"""
Usage:
Just A Template
"""
from __future__ import division
 
import sys,time
j = '#'
if __name__ == '__main__':
    for i in range(1,61):
        j += '#'
        sys.stdout.write(str(int((i/60)*100))+'%  ||'+j+'->'+"\r")
        sys.stdout.flush()
        time.sleep(0.5)
print

第二種思路是用轉義符\b
轉義符\b是退格鍵,也就是說把輸出的光標往回退格子,這樣就可以不用+=了,例如:

#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
#Author: [email protected]
#2010-10-27 22:07
"""
Usage:
Just A Template
"""
from __future__ import division
 
import sys,time
if __name__ == '__main__':
    for i in range(1,61):
        sys.stdout.write('#'+'->'+"\b\b")
        sys.stdout.flush()
        time.sleep(0.5)
print

光標回退2格,寫個#再回退,再寫,達到增長的目的了

不過寫這麼多似乎是廢話,在耳邊常常聽到一句話:那就是不要重復造輪子。實際上python有豐富發lib幫你實現這個東西,你完全可以把心思放在邏輯開發上而不用注意這些小細節

下面要介紹的就是這個類“progressbar”(http://code.google.com/p/python-progressbar/),使用easy_install可以方便的安裝這可個類庫,其實就一個文件,拿過來放到文件同一個目錄下面也直接可以import過來

如圖所示:

 

《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-01/111141p2.htm

Copyright © Linux教程網 All Rights Reserved