日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

作者 | 劉早起

來源 | 早起Python(ID: zaoqi-python)

大家好,在下載某些文件的時(shí)候你一定會(huì)不時(shí)盯著進(jìn)度條,在寫代碼的時(shí)候使用進(jìn)度條可以便捷的觀察任務(wù)處理情況,除了使用print來打印之外,今天本文就介紹幾種給你的Python代碼加上酷炫的進(jìn)度條的方式。

給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

 

自定義ProgressBar

最原始的辦法就是不借助任何第三方工具,自己寫一個(gè)進(jì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/%ir" % (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)
給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

自己定義的好處就是可以將進(jìn)度條定義成我們想要的形式比如上面就是使用#與·來輸出,為什么不用print?因?yàn)閟ys.stdout就是print的一種默認(rèn)輸出格式,而sys.stdout.write可以不換行打印,sys.stdout.flush可以立即刷新輸出的內(nèi)容。當(dāng)然也可以封裝成類來更好的使用[1],但效果是類似的。

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代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

 

tqdm

之前我們說了,自定義的好處就是可以自己修改,那么使用第三方庫(kù)的好處就是可以偷懶,不用自己寫,拿來就能用。比如提到Python進(jìn)度條那肯定會(huì)想到常用的tqdm,安裝很簡(jiǎn)單pip install tqdm即可,使用也很簡(jiǎn)單,幾行代碼即可實(shí)現(xiàn)上面的進(jìn)度條

from tqdm import trange
import time
for i in trange(10):
time.sleep(1)
給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

當(dāng)然tqdm作為老牌的Python進(jìn)度條工具,循環(huán)處理、多進(jìn)程、多線程、遞歸處理等都是支持的,你可以在官方GitHub上學(xué)習(xí)[2]、解鎖更多的玩法。

給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

 

Rich

上面兩種實(shí)現(xiàn)Python進(jìn)度條的方法都學(xué)會(huì)了嗎,雖然簡(jiǎn)單但是看上去并不漂亮,顏色也比較單調(diào)。所以最后壓軸出場(chǎng)的就是一款比較小眾的第三方庫(kù)Rich[3]。Rich主要是用于在終端中打印豐富多彩的文本(最高支持1670萬色)

給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

所以當(dāng)然可以使用Rich打印進(jìn)度條,顯示完成百分比,剩余時(shí)間,數(shù)據(jù)傳輸速度等都可以。并且樣式更加酷炫,并且它是高度可配置的,因此我們可以對(duì)其進(jìn)行自定義以顯示所需的任何信息。使用也很簡(jiǎn)單,比如我們使用Rich來實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的進(jìn)度條。

from rich.progress import track
import time

for step in track(range(30)):
print('早起Python')
time.sleep(0.5)
給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

同時(shí)Rich支持多個(gè)進(jìn)度條,這在多任務(wù)情況下監(jiān)控的進(jìn)度很有用(使用方法見官方文檔)

給Python代碼加上酷炫進(jìn)度條的幾種姿勢(shì)

參考資料

[1]stackoverflow: https://stackoverflow.com/questions/3160699/python-progress-bar

[2]Tqdm: https://github.com/tqdm/tqdm

[3]Rich: https://github.com/willmcgugan/rich

分享到:
標(biāo)簽:Python
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定