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

你是否曾在下載大文件時(shí),想要知道下載的進(jìn)度呢?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)在上面的代碼中,我們首先獲取到要下載文件的大小。然后,我們?cè)?tqdm 中設(shè)置總的進(jìn)度條數(shù)目為文件大小除以每個(gè)進(jìn)度條代表的字節(jié)數(shù)。這樣,當(dāng)我們下載每一個(gè)字節(jié)塊并寫入文件時(shí),tqdm 就會(huì)自動(dòng)更新進(jìn)度條。
02

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

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

在許多情況下,我們的代碼可能包含嵌套循環(huán)。在這種情況下,我們可以使用 tqdm 創(chuàng)建多個(gè)進(jìn)度條。
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í)行一些耗時(shí)的操作
time.sleep(0.01)在這段代碼中,我們創(chuàng)建了兩個(gè)進(jìn)度條,一個(gè)用于外部循環(huán),一個(gè)用于內(nèi)部循環(huán)。leave=False 選項(xiàng)將在內(nèi)部循環(huán)結(jié)束后刪除內(nèi)部循環(huán)的進(jìn)度條。
05

有時(shí)候,我們可能需要手動(dòng)更新進(jìn)度條。例如,當(dāng)我們?cè)谙螺d文件或處理批量數(shù)據(jù)時(shí),我們可能一次處理多個(gè)項(xiàng)目。在這種情況下,我們可以使用 update 方法。
from tqdm import tqdm
import time
with tqdm(total=100) as pbar:
for i in range(10):
# 執(zhí)行一些耗時(shí)的操作
time.sleep(0.1)
pbar.update(10)在這段代碼中,我們首先創(chuàng)建了一個(gè)進(jìn)度條,然后在循環(huán)中使用 update 方法手動(dòng)更新進(jìn)度條的值。
總結(jié):
本文介紹了Python進(jìn)度條神器tqdm的使用方法和實(shí)例。tqdm是一個(gè)非常實(shí)用的工具,可以幫助我們更好地了解程序的運(yùn)行情況,提高代碼的可讀性和可維護(hù)性。在使用tqdm時(shí),我們需要注意以下幾點(diǎn):
- 在循環(huán)中使用tqdm時(shí),需要將可迭代對(duì)象作為參數(shù)傳遞給tqdm函數(shù)。
- 可以通過設(shè)置參數(shù)來自定義進(jìn)度條的樣式和顯示方式。
- 如果需要在多線程或多進(jìn)程中使用tqdm,需要使用tqdm的并發(fā)版本。
- 在使用tqdm時(shí),需要注意進(jìn)度條的更新頻率,避免過于頻繁地更新進(jìn)度條,影響程序的性能。
總之,tqdm是一個(gè)非常實(shí)用的工具,可以幫助我們更好地了解程序的運(yùn)行情況,提高代碼的可讀性和可維護(hù)性。
以上就是 tqdm 的一些更深入的用法。你應(yīng)該可以看出 tqdm 是一個(gè)非常強(qiáng)大的工具,無論你在做什么,只要你需要等待,就可以使用 tqdm。希望你可以在你的代碼中嘗試使用 tqdm,看看它如何提升你的編程體驗(yàn)。希望本文能夠?qū)Υ蠹覍W(xué)習(xí)和使用tqdm有所幫助。
相關(guān)文章
pyqt遠(yuǎn)程批量執(zhí)行Linux命令程序的方法
今天小編就為大家分享一篇pyqt遠(yuǎn)程批量執(zhí)行Linux命令程序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
python利用logging模塊實(shí)現(xiàn)根據(jù)日志級(jí)別打印不同顏色日志的代碼案例
這篇文章主要介紹了python利用logging模塊實(shí)現(xiàn)根據(jù)日志級(jí)別打印不同顏色日志,本文通過實(shí)例代碼給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
python中ImageTk.PhotoImage()不顯示圖片卻不報(bào)錯(cuò)問題解決
這篇文章主要給大家介紹了關(guān)于在python中ImageTk.PhotoImage()不顯示圖片卻不報(bào)錯(cuò)問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
Python與Node.js之間實(shí)現(xiàn)通信的JSON數(shù)據(jù)接收發(fā)送
Python和Node.js是兩個(gè)流行且功能強(qiáng)大的編程語言,它們之間使用JSON格式進(jìn)行數(shù)據(jù)交換是一種高效和靈活的方式,本文將詳細(xì)介紹如何在Python和Node.js之間通過JSON進(jìn)行數(shù)據(jù)通信,包括發(fā)送和接收J(rèn)SON數(shù)據(jù)以及一些常見的交互示例代碼2024-01-01
Python字典數(shù)據(jù)對(duì)象拆分的簡單實(shí)現(xiàn)方法
這篇文章主要介紹了Python字典數(shù)據(jù)對(duì)象拆分的簡單實(shí)現(xiàn)方法,涉及Python針對(duì)字典數(shù)據(jù)的相關(guān)遍歷、拆分等操作技巧,需要的朋友可以參考下2017-12-12
PyTorch加載數(shù)據(jù)集梯度下降優(yōu)化
這篇文章主要介紹了PyTorch加載數(shù)據(jù)集梯度下降優(yōu)化,使用DataLoader方法,并繼承DataSet抽象類,可實(shí)現(xiàn)對(duì)數(shù)據(jù)集進(jìn)行mini_batch梯度下降優(yōu)化,需要的小伙伴可以參考一下2022-03-03
使用IDLE的Python shell窗口實(shí)例詳解
在本篇文章里小編給各位整理的是關(guān)于使用IDLE的Python shell窗口實(shí)例詳解內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-11-11
PyTorch2.9鏡像部署實(shí)測(cè)三大國內(nèi)源速度
本文介紹了如何在星圖GPU平臺(tái)上自動(dòng)化部署PyTorch 2.9鏡像,快速搭建開箱即用的深度學(xué)習(xí)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04
原來我一直安裝 Python 庫的姿勢(shì)都不對(duì)呀
平常我都是直接執(zhí)行 pip install 安裝的第三方庫,很多教程也是這么介紹的,一直以來我都認(rèn)為這是標(biāo)準(zhǔn)的、正確的安裝 Python 第三方庫的姿勢(shì)。下面小編給大家分享一篇教程,一起看看吧2019-11-11
Pandas實(shí)現(xiàn)在線文件和剪貼板數(shù)據(jù)讀取詳解
這篇文章主要為大家介紹的是Pandas兩種少用的讀取文件方式:讀取在線文件的數(shù)據(jù)和讀取剪貼板的數(shù)據(jù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-06-06

