其他關(guān)于Python的總結(jié)文章請訪問:http://www.reibang.com/nb/47435944
詳解使用Python中的tqdm模塊顯示進(jìn)度條
Python中可以使用tqdm
包來顯示進(jìn)度條蝶涩。進(jìn)度條的原理其實很簡單呵恢,就是不斷地刪除已經(jīng)打印的內(nèi)容炎码,然后重新寫出新的進(jìn)度负乡,從而完成在同一行中的進(jìn)度條再不斷增長的效果。tqdm
不是Python自有的模塊懈凹,需要安裝瘾带,比如使用pip
安裝:
pip install tqdm
可以從包tqdm
中引入所有內(nèi):
from tqdm import *
更好的一種方式是根據(jù)需求引入一些常用的或者需要的類、方法:
from tqdm import tqdm, trange
注意驻售,第一個tqdm
是包名露久,第二個tqdm
是類名,恰好同名欺栗,不要誤用 import tqdm,trange
這樣的代碼來(錯誤地)引入tqdm
類和trange
方法毫痕。
tqdm
的使用方法大概有如下幾種方式:
直接封裝可迭代對象
可以直接使用tqdm
創(chuàng)建一個類實例,第一個參數(shù)是一個可迭代對象迟几,即tqdm
可以直接包裝一個可迭代對象消请,從而進(jìn)行迭代時就會使用進(jìn)度條了,比如range(100)
一個簡單的可迭代對象:
from tqdm import tqdm
import time, random
for i in tqdm(range(10)):
time.sleep(random.random())
使用簡化的trange
上文中一個簡單的使用tqdm
直接封裝range
可迭代對象的代碼可以簡單地使用trange
代替类腮,即 trange(X) = tqdm(range(X))
臊泰,例如下邊的例子等同于上邊中的第一個例子:
from tqdm import trange
import time, random
for i in trange(10):
time.sleep(random.random())
實例化一個tqdm類
如果想對進(jìn)度條進(jìn)行更加詳細(xì)的定制,可以實例化一個tqdm
類的實例蚜枢,然后使用它的方法來更好地發(fā)揮作用
實例化tqdm
類時有一些其他的可能比較常用的參數(shù):
-
iterable
(第一個參數(shù)):一個可迭代對象 -
desc
:對進(jìn)度條的描述缸逃,會顯示在進(jìn)度條前邊 -
total
:預(yù)期的總迭代次數(shù)(默認(rèn)會等于iterable
的總次數(shù)针饥,如果可數(shù)的話) -
ncols
:總長度 -
mininterval
:最小的更新時間間隔,默認(rèn)為0.1 -
maxinterval
:最大的更新時間間隔需频,默認(rèn)為10
一個tqdm
實例的常用方法:
-
set_description
:設(shè)置顯示在進(jìn)度條前邊的內(nèi)容 -
set_postfix
:設(shè)置顯示在進(jìn)度條后邊的內(nèi)容 -
update
:對進(jìn)度進(jìn)行手動更新 -
close
:關(guān)閉進(jìn)度條實例丁眼,實際上,最好在使用完一個tqdm
類的實例后使用close
方法清理資源昭殉,就像使用open
打開的文件一樣苞七,從而釋放內(nèi)存。
一個例子:
from tqdm import tqdm
import time, random
p_bar = tqdm(range(10), desc="A Processing Bar Sample: ", total=10, ncols=100)
for i in p_bar:
time.sleep(random.random())
p_bar.close()
使用with語句
因為一個實例化的tqdm
也需要在使用完畢后通過close
方法清理資源挪丢,這和打開一個文件進(jìn)行處理是很類似的莽鸭,因此同樣可以使用with
語句,讓其在執(zhí)行完后自動清理吃靠,就不再需要使用close
方法手動關(guān)閉了:
from tqdm import tqdm
import time, random
with tqdm(total=100) as p_bar:
for i in range(50):
time.sleep(random.random())
p_bar.update(2)
p_bar.set_description("Processing {}-th iteration".format(i+1))