您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python如何實現(xiàn)酷炫進度條的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python如何實現(xiàn)酷炫進度條文章都會有所收獲,下面我們一起來看看吧。
最原始的辦法就是不借助任何第三方工具,自己寫一個進度條函數(shù),使用time模塊配合sys模塊即可
import sys import time def progressbar(it, prefix="", size=60, file=sys.stdout): count = len(it) def show(j): x = int(size*j/count) file.write("%s[%s%s] %i/%i\r" % (prefix, "#"*x, "."*(size-x), j, count)) file.flush() show(0) for i, item in enumerate(it): yield item show(i+1) file.write("\n") file.flush() for i in progressbar(range(15), "Computing: ", 40): do_something() time.sleep(0.1)
自己定義的好處就是可以將進度條定義成我們想要的形式比如上面就是使用#與·來輸出,為什么不用print?因為sys.stdout
就是print的一種默認輸出格式,而sys.stdout.write()
可以不換行打印,sys.stdout.flush()
可以立即刷新輸出的內(nèi)容。當然也可以封裝成類來更好的使用,但效果是類似的。
from __future__ import print_function import sys import re class ProgressBar(object): DEFAULT = 'Progress: %(bar)s %(percent)3d%%' FULL = '%(bar)s %(current)d/%(total)d (%(percent)3d%%) %(remaining)d to go' def __init__(self, total, width=40, fmt=DEFAULT, symbol='=', output=sys.stderr): assert len(symbol) == 1 self.total = total self.width = width self.symbol = symbol self.output = output self.fmt = re.sub(r'(?P<name>%\(.+?\))d', r'\g<name>%dd' % len(str(total)), fmt) self.current = 0 def __call__(self): percent = self.current / float(self.total) size = int(self.width * percent) remaining = self.total - self.current bar = '[' + self.symbol * size + ' ' * (self.width - size) + ']' args = { 'total': self.total, 'bar': bar, 'current': self.current, 'percent': percent * 100, 'remaining': remaining } print('\r' + self.fmt % args, file=self.output, end='') def done(self): self.current = self.total self() print('', file=self.output) from time import sleep progress = ProgressBar(80, fmt=ProgressBar.FULL) for x in range(progress.total): progress.current += 1 progress() sleep(0.1) progress.done()
之前我們說了,自定義的好處就是可以自己修改,那么使用第三方庫的好處就是可以偷懶,不用自己寫,拿來就能用。比如提到Python進度條那肯定會想到常用的tqdm
,安裝很簡單pip install tqdm
即可,使用也很簡單,幾行代碼即可實現(xiàn)上面的進度條
from tqdm import trange import time for i in trange(10): time.sleep(1)
當然tqdm作為老牌的Python進度條工具,循環(huán)處理、多進程、多線程、遞歸處理等都是支持的,你可以在官方GitHub上學習 、解鎖更多的玩法。
上面兩種實現(xiàn)Python進度條的方法都學會了嗎,雖然簡單但是看上去并不漂亮,顏色也比較單調(diào)。所以最后壓軸出場的就是一款比較小眾的第三方庫Rich 。Rich主要是用于在終端中打印豐富多彩的文本(最高支持1670萬色)
所以當然可以使用Rich打印進度條,顯示完成百分比,剩余時間,數(shù)據(jù)傳輸速度等都可以。并且樣式更加酷炫,并且它是高度可配置的,因此我們可以對其進行自定義以顯示所需的任何信息。使用也很簡單,比如我們使用Rich來實現(xiàn)一個最簡單的進度條
from rich.progress import track import time for step in track(range(30)): time.sleep(0.5)
同時Rich支持多個進度條,這在多任務情況下監(jiān)控的進度很有用
關于“Python如何實現(xiàn)酷炫進度條”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Python如何實現(xiàn)酷炫進度條”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。