python進(jìn)度條tqdm使用方式
安裝tqdm
tqdm是一個顯示進(jìn)度條的python工具包。
安裝命令如下:
conda install tqdm
或
pip install tqdm
在循環(huán)中顯示進(jìn)度條
from tqdm import tqdm, trange
1. 使用tqdm.tqdm()實現(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,可迭代對象。如上一節(jié)中的range(20)desc=None,傳入str類型,作為進(jìn)度條標(biāo)題。如上一節(jié)中的desc='It\'s a test'total=None,預(yù)期的迭代次數(shù)。一般不填,默認(rèn)為iterable的長度。leave=True,迭代結(jié)束時,是否保留最終的進(jìn)度條。默認(rèn)保留。file=None,輸出指向位置,默認(rèn)是終端,一般不需要設(shè)置。ncols=None,可以自定義進(jìn)度條的總長度unit,描述處理項目的文字,默認(rèn)’it’,即100it/s;處理照片設(shè)置為’img’,則為100img/spostfix,以字典形式傳入詳細(xì)信息,將顯示在進(jìn)度條中。例如postfix={'value': 520}unit_scale,自動根據(jù)國際標(biāo)準(zhǔn)進(jìn)行項目處理速度單位的換算,例如100000it/s換算為100kit/s
3. tqdm()的返回值
tqdm()的返回值是一個可迭代對象,迭代的每一個元素就是iterable的每一個參數(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ù)實際上是封裝了一下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()的第一個參數(shù)為可迭代對象的長度,其余參數(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)過程中輸出額外內(nèi)容
在循環(huán)進(jìn)行中,你可能想要輸出一些內(nèi)容,但是直接使用print輸出會導(dǎo)致進(jìn)度條出現(xiàn)多行。
解決方法有兩種:
1.參考【3. tqdm()的返回值】示例中的tbar.set_postfix方法,將內(nèi)容直接顯示在進(jìn)度條尾部。
2.使用tqdm.write('你要顯示的內(nèi)容。')方法;若使用pycharm的Run窗口運行,該方法仍無效或存在格式問題,可能是pycharm的bug,此時請使用方法1或改用終端(Terminal)運行代碼。
for i in tqdm(range(5), desc='Test'):
tqdm.write('當(dāng)前i={}'.format(i))
time.sleep(0.5)

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

解決方法:你必須指定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)
*其他方法實現(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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python3+PyQt5重新實現(xiàn)自定義數(shù)據(jù)拖放處理
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5重新實現(xiàn)自定義數(shù)據(jù)拖放處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
java中兩個byte數(shù)組實現(xiàn)合并的示例
今天小編就為大家分享一篇java中兩個byte數(shù)組實現(xiàn)合并的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
淺談多卡服務(wù)器下隱藏部分 GPU 和 TensorFlow 的顯存使用設(shè)置
這篇文章主要介紹了淺談多卡服務(wù)器下隱藏部分 GPU 和 TensorFlow 的顯存使用設(shè)置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python中xml和json格式相互轉(zhuǎn)換操作示例
這篇文章主要介紹了Python中xml和json格式相互轉(zhuǎn)換操作,結(jié)合實例形式分析了xmltodict庫的安裝及xml格式與json格式數(shù)據(jù)相互轉(zhuǎn)換操作技巧,需要的朋友可以參考下2018-12-12
一文帶你學(xué)會Python?Flask框架設(shè)置響應(yīng)頭
本篇博客我們將帶大家全面了解Python中Flask框架關(guān)于請求的相關(guān)設(shè)置的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2023-01-01

