中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在python中利用 tqdm實現一個進度條功能

發布時間:2020-11-11 14:11:55 來源:億速云 閱讀:274 作者:Leah 欄目:開發技術

本篇文章為大家展示了在python中利用 tqdm實現一個進度條功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一、前言

\quad \quad 有時候在使用Python處理比較耗時操作的時候,為了便于觀察處理進度,這時候就需要通過進度條將處理情況進行可視化展示,以便我們能夠及時了解情況。這對于第三方庫非常豐富的Python來說,想要實現這一功能并不是什么難事。
\quad \quad tqdm就能非常完美的支持和解決這些問題,可以實時輸出處理進度而且占用的CPU資源非常少,支持循環處理多進程遞歸處理、還可以結合linux的命令來查看處理情況,等進度展示。

我們先來看一下進度條的效果。

from tqdm import tqdm
for i in tqdm(range(int(9e6))):
  pass

在python中利用 tqdm實現一個進度條功能

可以看到,當我們的代碼的運行需要較長時間時,進度條可以很好的幫助我們了解整個代碼的運行進度。

1、安裝

tqdm的安裝十分簡單,只需要通過pip或conda就可以安裝。

2、pip安裝

pip install tqdm

3、conda安裝

conda install -c conda-forge tqdm

二、tqdm相關操作

1、迭代對象處理

對于可以迭代的對象都可以使用下面這種方式,來實現可視化進度,非常方便。

from tqdm import tqdm
import time
for i in tqdm(range(100)):
  time.sleep(0.1)
  pass
100%|████████████████████████████████████████████████████████████████████████████████| 100/100 [00:10<00:00, 9.88it/s]

2、觀察處理的數據

通過tqdm提供的set_description方法可以實時查看每次處理的數據。

from tqdm import tqdm
import time

pbar = tqdm(["A","B","C","D","E","F"])
for c in pbar:
  time.sleep(1)
  pbar.set_description("Processing %s"%c)

在python中利用 tqdm實現一個進度條功能

3、pandas中使用tqdm

pandas中對大量數據進行相關操作或者遍歷表格的行列時,我們可以使用tqdm來了解代碼運行情況。

import pandas as pd
df = pd.DataFrame({
  'Month':[1,2,3,4,5,2,3,4,5,1,2,3,4],
  'Name':['張三','張三','張三','張三','張三','李四','李四','李四','李四','王五','王五','王五','王五'],
  'Sex':['男','男','女','女','女','男','男','男','男','女','女','女','女']})
for i in tqdm(['Month','Name','Sex']):
  pass
100%|██████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4707.41it/s]

4、多進程進度條

在使用多進程或者嵌套循環處理任務的時候,我們通過tqdm可以實時查看每一個進程任務的處理情況

from tqdm import tqdm
import time
for i in tqdm(range(5), ascii=True,desc="1st process"):
  for j in tqdm(range(5), ascii=True,desc="2nd process"):
    time.sleep(0.01)
1st process:  0%|                                        | 0/5 [00:00<&#63;, &#63;it/s]
2nd process:  0%|                                        | 0/5 [00:00<&#63;, &#63;it/s]
2nd process: 100%|#######################################################################| 5/5 [00:00<00:00, 94.27it/s]
2nd process:  0%|                                        | 0/5 [00:00<&#63;, &#63;it/s]
1st process: 40%|############################4                     | 2/5 [00:00<00:00, 18.09it/s]
2nd process:  0%|                                        | 0/5 [00:00<&#63;, &#63;it/s]
2nd process: 100%|#######################################################################| 5/5 [00:00<00:00, 93.95it/s]
2nd process:  0%|                                        | 0/5 [00:00<&#63;, &#63;it/s]
1st process: 80%|########################################################8       | 4/5 [00:00<00:00, 17.99it/s]
2nd process:  0%|                                        | 0/5 [00:00<&#63;, &#63;it/s]
1st process: 100%|#######################################################################| 5/5 [00:00<00:00, 17.86it/s]

5、自定義進度條顯示信息

通過update方法可以控制每次進度條更新的進度。

from tqdm import tqdm
import time
#total參數設置進度條的總長度為100
with tqdm(total=100) as pbar:
  for i in range(100):
    time.sleep(0.05)
    #每次更新進度條的長度為1
    pbar.update(1)

在python中利用 tqdm實現一個進度條功能

除了上述方法之外,我們還能通過另外一種方法來實現操作。

from tqdm import tqdm
import time
#total參數設置進度條的總長度為100
pbar = tqdm(total=100)
for i in range(100):
  time.sleep(0.05)
  #每次更新進度條的長度為1
  pbar.update(1)
#關閉占用的資源
pbar.close()

在python中利用 tqdm實現一個進度條功能

另外,我們還能通過set_descriptionset_postfix方法設置進度條顯示信息。

from tqdm import trange
from random import random,randint
import time

with trange(100) as t:
  for i in t:
    #設置進度條左邊顯示的信息
    #注意:代碼中的HVAE是可以手動換成其他內容的
    t.set_description("GEN %i"%i)
    #設置進度條右邊顯示的信息  
    #注意:此處代碼中的gen lr lst是可以手動換成其他內容的
    t.set_postfix(loss=random(),gen=randint(1,999),lr="h",lst=[1,2])
    time.sleep(0.1)
GEN 99: 100%|███████████████████████████████| 100/100 [00:10<00:00, 9.77it/s, gen=190, loss=0.00811, lr=h, lst=[1, 2]]

令人震驚的是,當我們將進度條顯示的信息設置中文時,竟然不會出現亂碼!!!!

from tqdm import trange
from random import random,randint
import time

with trange(100) as t:
  for i in t:
    #設置進度條左邊顯示的信息
    t.set_description("進度 %i"%i)
    #設置進度條右邊顯示的信息  
    t.set_postfix(loss=random(),隨機=randint(1,999),名字="h",列表=[1,2])
    time.sleep(0.1)
進度 99: 100%|████████████████████████████████████| 100/100 [00:10<00:00, 9.75it/s, loss=0.975, 列表=[1, 2], 名字=h, 隨機=469]

三、其他相關操作

&#8203; Last but not least!!最后的內容是十分重要的!!

1、我們在使用tqdm的時候,可以將tqdm(range(n))替換為trange(n),讓你的代碼看起來更加簡潔而又高大上!

from tqdm import tqdm,trange
import time
for i in trange(100):
  time.sleep(0.1)
  pass
100%|████████████████████████████████████████████████████████████████████████████████| 100/100 [00:10<00:00, 9.90it/s]

2、當我們在jupyter notebook中使用進度條時,我們會發現整個進度條十分的難看,而在可能會出現多條進度條的情況,這樣會讓我們的代碼顯得十分的難看,這顯然不是我們想要得到的結果。

我們先來感受一下,這種丑丑的運行結果。

from tqdm import tqdm
for i in tqdm(range(int(200))):
  print('tqdm',end=' ')
 0%|                                             | 0/200 [00:00<&#63;, &#63;it/s]
tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm 
68%|█████████████████████████████████████████████████████▍            | 137/200 [00:00<00:00, 1360.43it/s]

tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm tqdm 100%|██████████████████████████████████████████████████████████████████████████████| 200/200 [00:00<00:00, 1337.14it/s]

\quad 可以看到,上面的代碼我們僅僅打印了兩百次,整個運行結果就有多個進度條,整體的視覺效果特別差。如果當我們需要進行成千上萬次迭代時,整個運行結果將會不堪入目,比我們未使用進度條時的結果更加難看,顯然這不是我們想看到的。

tqdm針對jupyter notebook添加了專門的進度條美化方法,使用tqdm_notebook()方法,我們看看效果:

from tqdm import tqdm_notebook
import time
for i in tqdm_notebook(range(100),desc='demo:'):
  time.sleep(0.01)
  print('tqdm',end=' ')

tqdm在阿拉伯語中的意思是“進展”,是python中一個快速、擴展性強的進度條工具庫,能讓我們了解代碼的運行進度,也能讓我們的運行結果看起來顯得更加美觀而又高大上

上述內容就是在python中利用 tqdm實現一個進度條功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西贡区| 成都市| 花垣县| 沽源县| 宁城县| 湟中县| 陇南市| 易门县| 正宁县| 通城县| 宁城县| 霍邱县| 丰城市| 重庆市| 丽江市| 濉溪县| 沙洋县| 乐清市| 马鞍山市| 吴堡县| 靖宇县| 德令哈市| 利辛县| 桃园县| 隆德县| 鹤壁市| 陇西县| 濮阳市| 谢通门县| 通州区| 广灵县| 满洲里市| 蛟河市| 和田市| 玉溪市| 松潘县| 武城县| 霍州市| 施甸县| 双城市| 三原县|