python進(jìn)度條tqdm使用方式
安裝tqdm
tqdm是一個(gè)顯示進(jìn)度條的python工具包。
安裝命令如下:
conda install tqdm
或
pip install tqdm
在循環(huán)中顯示進(jìn)度條
from tqdm import tqdm, trange
1. 使用tqdm.tqdm()實(shí)現(xiàn)進(jìn)度條
示例:
for i in tqdm(range(20), desc='It\'s a test'):
time.sleep(0.1)

2. tqdm()主要參數(shù)默認(rèn)值與解釋
iterable=None,可迭代對(duì)象。如上一節(jié)中的range(20)desc=None,傳入str類型,作為進(jìn)度條標(biāo)題。如上一節(jié)中的desc='It\'s a test'total=None,預(yù)期的迭代次數(shù)。一般不填,默認(rèn)為iterable的長(zhǎng)度。leave=True,迭代結(jié)束時(shí),是否保留最終的進(jìn)度條。默認(rèn)保留。file=None,輸出指向位置,默認(rèn)是終端,一般不需要設(shè)置。ncols=None,可以自定義進(jìn)度條的總長(zhǎng)度unit,描述處理項(xiàng)目的文字,默認(rèn)’it’,即100it/s;處理照片設(shè)置為’img’,則為100img/spostfix,以字典形式傳入詳細(xì)信息,將顯示在進(jìn)度條中。例如postfix={'value': 520}unit_scale,自動(dòng)根據(jù)國(guó)際標(biāo)準(zhǔn)進(jìn)行項(xiàng)目處理速度單位的換算,例如100000it/s換算為100kit/s
3. tqdm()的返回值
tqdm()的返回值是一個(gè)可迭代對(duì)象,迭代的每一個(gè)元素就是iterable的每一個(gè)參數(shù)。
該返回值可以修改進(jìn)度條信息。
示例:
with tqdm(range(100), desc='Test') as tbar:
for i in tbar:
tbar.set_postfix(loss=i/100, x=i)
tbar.update() # 默認(rèn)參數(shù)n=1,每update一次,進(jìn)度+n
time.sleep(0.2)

4. tqdm.trange()
該函數(shù)實(shí)際上是封裝了一下tqdm()。
源代碼為:
def trange(*args, **kwargs):
"""
A shortcut for tqdm(xrange(*args), **kwargs).
On Python3+ range is used instead of xrange.
"""
return tqdm(_range(*args), **kwargs)
顯然,trange()的第一個(gè)參數(shù)為可迭代對(duì)象的長(zhǎng)度,其余參數(shù)與tqdm()一致。
示例:
for i in trange(100, desc='Test1'):
time.sleep(0.2)
或
with trange(100, desc='Test2') as tbar:
for i in range(100):
tbar.set_postfix(loss=i/100, x=i)
tbar.update()
time.sleep(0.2)
5. 循環(huán)過(guò)程中輸出額外內(nèi)容
在循環(huán)進(jìn)行中,你可能想要輸出一些內(nèi)容,但是直接使用print輸出會(huì)導(dǎo)致進(jìn)度條出現(xiàn)多行。
解決方法有兩種:
1.參考【3. tqdm()的返回值】示例中的tbar.set_postfix方法,將內(nèi)容直接顯示在進(jìn)度條尾部。
2.使用tqdm.write('你要顯示的內(nèi)容。')方法;若使用pycharm的Run窗口運(yùn)行,該方法仍無(wú)效或存在格式問(wèn)題,可能是pycharm的bug,此時(shí)請(qǐng)使用方法1或改用終端(Terminal)運(yùn)行代碼。
for i in tqdm(range(5), desc='Test'):
tqdm.write('當(dāng)前i={}'.format(i))
time.sleep(0.5)

6. 無(wú)法獲取迭代器長(zhǎng)度的坑
有些迭代器是只能迭代一次的(如zip()),甚至連len()方法都沒(méi)有,即tqdm就無(wú)法得知它的總長(zhǎng)度,從而導(dǎo)致進(jìn)度條顯示不出來(lái)(如下圖)

解決方法:你必須指定total參數(shù),如下
x = range(20)
y = range(20)
data = zip(x, y)
for i in tqdm(data, desc='Test', total=len(x)):
time.sleep(0.1)
*其他方法實(shí)現(xiàn)進(jìn)度條
def process_bar(current, total, prefix='', auto_rm=True):
bar = '=' * int(current / total * 50)
bar = f' {prefix} |{bar.ljust(50)}| ({current}/{total}) {current / total:.1%} | '
print(bar, end='\r', flush=True)
if auto_rm and current == total:
print(end=('\r' + ' ' * len(bar) + '\r'), flush=True)
for i in range(0, 100):
time.sleep(0.1)
process_bar(i+1, 100, '首部信息', auto_rm=False)
print('進(jìn)度條演示')


總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python3+PyQt5重新實(shí)現(xiàn)自定義數(shù)據(jù)拖放處理
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5重新實(shí)現(xiàn)自定義數(shù)據(jù)拖放處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
python版本的仿windows計(jì)劃任務(wù)工具
這篇文章主要介紹了python版本的仿windows計(jì)劃任務(wù)工具,計(jì)劃任務(wù)工具根據(jù)自己設(shè)定的具體時(shí)間,頻率,命令等屬性來(lái)規(guī)定所要執(zhí)行的計(jì)劃,當(dāng)然功能不是很全大家可以補(bǔ)充2018-04-04
java中兩個(gè)byte數(shù)組實(shí)現(xiàn)合并的示例
今天小編就為大家分享一篇java中兩個(gè)byte數(shù)組實(shí)現(xiàn)合并的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Pipenv輕量級(jí)虛擬環(huán)境管理工具使用指南
這篇文章主要為大家介紹了Pipenv輕量級(jí)虛擬環(huán)境管理工具使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
淺談多卡服務(wù)器下隱藏部分 GPU 和 TensorFlow 的顯存使用設(shè)置
這篇文章主要介紹了淺談多卡服務(wù)器下隱藏部分 GPU 和 TensorFlow 的顯存使用設(shè)置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python中xml和json格式相互轉(zhuǎn)換操作示例
這篇文章主要介紹了Python中xml和json格式相互轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了xmltodict庫(kù)的安裝及xml格式與json格式數(shù)據(jù)相互轉(zhuǎn)換操作技巧,需要的朋友可以參考下2018-12-12
一文帶你學(xué)會(huì)Python?Flask框架設(shè)置響應(yīng)頭
本篇博客我們將帶大家全面了解Python中Flask框架關(guān)于請(qǐng)求的相關(guān)設(shè)置的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2023-01-01
python實(shí)現(xiàn)簡(jiǎn)單名片管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單名片管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11

