Python進度條神器tqdm使用實例詳解
各位Python高手,今天我要給大家介紹一個好用的庫,它就是:tqdm
tqdm在阿拉伯語中的意思是 "進展",所以這個庫也被稱為 "快速進展條"。不得不說,這個名字真的很有創(chuàng)意!
讓我們想象一下,你正在運行一個耗時的數(shù)據(jù)處理任務(wù)或者訓練一個復(fù)雜的深度學習模型。你坐在那里,盯著屏幕,焦急地等待程序完成。這種等待的痛苦,我想你我都有切身體會。這時候,有個可視化的進度條會不會讓你感覺好很多呢?這就是我們今天要推薦的 tqdm 庫的功能。
tqdm 是一個 Python 快速、可擴展的進度條工具庫,它有很多優(yōu)點:
易于使用:只需在 Python 循環(huán)中包裹你的迭代器,一行代碼就能產(chǎn)生一個精美的進度條。
靈活:它可以和 for 循環(huán)、pandas dataframe的 apply 函數(shù)以及 Python 的 map 函數(shù)等等配合使用。
高效:tqdm 使用了智能算法,即使在數(shù)據(jù)流非??斓那闆r下,也不會拖慢你的代碼速度。
讓我們看一下 tqdm 在機器學習任務(wù)中的應(yīng)用示例:
from tqdm import tqdm
import time
for i in tqdm(range(100)):
# 假設(shè)我們正在進行一些耗時的操作,比如訓練深度學習模型
time.sleep(0.01)運行這段代碼,你會看到一個動態(tài)更新的進度條。tqdm 會告訴你還有多少項需要處理,預(yù)計剩余時間,以及當前的處理速度。
你會看到一個動態(tài)更新的進度條。tqdm 會告訴你還有多少項需要處理,預(yù)計剩余時間,以及當前的處理速度。
100%|██████████| 100/100 [00:01<00:00, 97.31it/s]
我們繼續(xù)深入到 tqdm 的更多使用場景和用法。
01

你是否曾在下載大文件時,想要知道下載的進度呢?tqdm 可以很好地滿足你的需求??纯聪旅娴拇a:
import requests
from tqdm import tqdm
response = requests.get(url, stream=True) # 把stream參數(shù)設(shè)置為True
file_size = int(response.headers['Content-Length'])
chunk = 1
chunk_size = 1024
num_bars = int(file_size / chunk_size)
with open(filename, 'wb') as fp:
for chunk in tqdm(response.iter_content(chunk_size=chunk_size), total=num_bars, unit='KB', desc=filename, leave=True):
fp.write(chunk)在上面的代碼中,我們首先獲取到要下載文件的大小。然后,我們在 tqdm 中設(shè)置總的進度條數(shù)目為文件大小除以每個進度條代表的字節(jié)數(shù)。這樣,當我們下載每一個字節(jié)塊并寫入文件時,tqdm 就會自動更新進度條。
02

在機器學習中,我們經(jīng)常需要對大規(guī)模的數(shù)據(jù)進行預(yù)處理。使用 tqdm,我們可以很直觀地看到數(shù)據(jù)預(yù)處理的進度。
import pandas as pd from tqdm import tqdm tqdm.pandas() # 假設(shè)我們有一個大的 dataframe,我們想要對其 'text' 列進行一些預(yù)處理 df['processed_text'] = df['text'].progress_apply(lambda x: preprocess(x))
在上面的代碼中,我們首先通過 tqdm.pandas() 方法對pandas 進行 patch。然后,我們就可以在 pandas 的 apply 方法中使用 progress_apply,這樣就可以在數(shù)據(jù)處理的同時顯示進度條。
03

在訓練深度學習模型時,我們經(jīng)常需要迭代大量的 epochs。使用 tqdm,我們可以清晰地看到模型訓練的進度。
from tqdm import tqdm
# 假設(shè)我們有一個訓練數(shù)據(jù)集 train_dataloader 和一個模型 model
for epoch in range(num_epochs):
epoch_iterator
= tqdm(train_dataloader, desc=
"Training (Epoch %d)"
% epoch)
for step, batch in enumerate(epoch_iterator):
# 模型訓練的代碼
# ...04

在許多情況下,我們的代碼可能包含嵌套循環(huán)。在這種情況下,我們可以使用 tqdm 創(chuàng)建多個進度條。
from tqdm import tqdm
import time
for i in tqdm(range(100), desc="Outer loop"):
for j in tqdm(range(10), desc="Inner loop", leave=False):
# 執(zhí)行一些耗時的操作
time.sleep(0.01)在這段代碼中,我們創(chuàng)建了兩個進度條,一個用于外部循環(huán),一個用于內(nèi)部循環(huán)。leave=False 選項將在內(nèi)部循環(huán)結(jié)束后刪除內(nèi)部循環(huán)的進度條。
05

有時候,我們可能需要手動更新進度條。例如,當我們在下載文件或處理批量數(shù)據(jù)時,我們可能一次處理多個項目。在這種情況下,我們可以使用 update 方法。
from tqdm import tqdm
import time
with tqdm(total=100) as pbar:
for i in range(10):
# 執(zhí)行一些耗時的操作
time.sleep(0.1)
pbar.update(10)在這段代碼中,我們首先創(chuàng)建了一個進度條,然后在循環(huán)中使用 update 方法手動更新進度條的值。
總結(jié):
本文介紹了Python進度條神器tqdm的使用方法和實例。tqdm是一個非常實用的工具,可以幫助我們更好地了解程序的運行情況,提高代碼的可讀性和可維護性。在使用tqdm時,我們需要注意以下幾點:
- 在循環(huán)中使用tqdm時,需要將可迭代對象作為參數(shù)傳遞給tqdm函數(shù)。
- 可以通過設(shè)置參數(shù)來自定義進度條的樣式和顯示方式。
- 如果需要在多線程或多進程中使用tqdm,需要使用tqdm的并發(fā)版本。
- 在使用tqdm時,需要注意進度條的更新頻率,避免過于頻繁地更新進度條,影響程序的性能。
總之,tqdm是一個非常實用的工具,可以幫助我們更好地了解程序的運行情況,提高代碼的可讀性和可維護性。
以上就是 tqdm 的一些更深入的用法。你應(yīng)該可以看出 tqdm 是一個非常強大的工具,無論你在做什么,只要你需要等待,就可以使用 tqdm。希望你可以在你的代碼中嘗試使用 tqdm,看看它如何提升你的編程體驗。希望本文能夠?qū)Υ蠹覍W習和使用tqdm有所幫助。
相關(guān)文章
python利用logging模塊實現(xiàn)根據(jù)日志級別打印不同顏色日志的代碼案例
這篇文章主要介紹了python利用logging模塊實現(xiàn)根據(jù)日志級別打印不同顏色日志,本文通過實例代碼給大家詳細講解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
python中ImageTk.PhotoImage()不顯示圖片卻不報錯問題解決
這篇文章主要給大家介紹了關(guān)于在python中ImageTk.PhotoImage()不顯示圖片卻不報錯問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-12-12
Python與Node.js之間實現(xiàn)通信的JSON數(shù)據(jù)接收發(fā)送
Python和Node.js是兩個流行且功能強大的編程語言,它們之間使用JSON格式進行數(shù)據(jù)交換是一種高效和靈活的方式,本文將詳細介紹如何在Python和Node.js之間通過JSON進行數(shù)據(jù)通信,包括發(fā)送和接收JSON數(shù)據(jù)以及一些常見的交互示例代碼2024-01-01
Python字典數(shù)據(jù)對象拆分的簡單實現(xiàn)方法
這篇文章主要介紹了Python字典數(shù)據(jù)對象拆分的簡單實現(xiàn)方法,涉及Python針對字典數(shù)據(jù)的相關(guān)遍歷、拆分等操作技巧,需要的朋友可以參考下2017-12-12
PyTorch加載數(shù)據(jù)集梯度下降優(yōu)化
這篇文章主要介紹了PyTorch加載數(shù)據(jù)集梯度下降優(yōu)化,使用DataLoader方法,并繼承DataSet抽象類,可實現(xiàn)對數(shù)據(jù)集進行mini_batch梯度下降優(yōu)化,需要的小伙伴可以參考一下2022-03-03
Pandas實現(xiàn)在線文件和剪貼板數(shù)據(jù)讀取詳解
這篇文章主要為大家介紹的是Pandas兩種少用的讀取文件方式:讀取在線文件的數(shù)據(jù)和讀取剪貼板的數(shù)據(jù),感興趣的小伙伴可以跟隨小編一起學習一下2022-06-06

