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/s
postfix
,以字典形式傳入詳細(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-04java中兩個byte數(shù)組實現(xiàn)合并的示例
今天小編就為大家分享一篇java中兩個byte數(shù)組實現(xiàn)合并的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05淺談多卡服務(wù)器下隱藏部分 GPU 和 TensorFlow 的顯存使用設(shè)置
這篇文章主要介紹了淺談多卡服務(wù)器下隱藏部分 GPU 和 TensorFlow 的顯存使用設(shè)置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python中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