Python

[Python] 파이썬 프로그레스바(Progress Bar) tqdm 사용 방법 : nested progress bar

파이썬 모듈을 명령프롬프트창에서 pip istall 모듈 명령어로 실행하면 진행상태바가 나타납니다. 0%에서 시작해서 100%에 도달하는 프로그레스바(Progress Bar)를 보셨을 겁니다.  프로그레스바를 사용하기위해 tqdm모듈을 사용합니다. tqdm 설치 방법 부터 사용법까지 알아봅니다.

 


출처 : https://pypi.org/project/tqdm/

■설치방법

명령프롬프트(cmd) 창을 열거나 파이참 툴의 경우 하단에 터미널창을 클릭하여 아래 설치 명령어를 실행합니다.

pip install tqdm

■사용방법

iterable이 가능한 자료형 데이터를 tqdm(iterable)로 감싸줍니다.

아래 예제는 a,b,c,d 4개의 문자열을 0.25초 시간 간격을 두고 text 변수에 더하는 과정을 프로그레스바로 표기한 예제 입니다. 진행바 뒤에 1/4, 2/4, 3/4, 4/4는 총 처리해야할 개수 대비 처리중인 개수를 표기합니다.

from tqdm import tqdm
from time import sleep

text = ""
for char in tqdm(["a", "b", "c", "d"]):
    sleep(0.25)
    text = text + char
    print(text)
    
    
#실행결과
 25%|██▌       | 1/4 [00:00<00:00,  3.88it/s]a
 50%|█████     | 2/4 [00:00<00:00,  3.89it/s]ab
 75%|███████▌  | 3/4 [00:00<00:00,  3.89it/s]abc
100%|██████████| 4/4 [00:01<00:00,  3.91it/s]abcd

이번에는 print문을 제거하고 실행해볼게요. 25%간격으로 순차적으로 프로그레스바가 채워집니다. 하나의 프로그레스바에 표현되고 있죠. 

from tqdm import tqdm
from time import sleep

text = ""
for char in tqdm(["a", "b", "c", "d"]):
    sleep(0.25)
    text = text + char
    
    
#실행결과
100%|██████████| 4/4 [00:01<00:00,  3.90it/s]

이번에는 tqdm()함수가 아닌, trange()함수를 사용하여봅니다.

from time import sleep
 
from tqdm import trange

for i in trange(100):
    sleep(0.01)
   
   
#실행결과
100%|██████████| 100/100 [00:01<00:00, 62.85it/s]

다음과 같은 방법으로도 표현할 수 있습니다. tqdm()를 변수에 받아서 처리 후 set_description()함수를 사용하여 개발자가 원하는 표현으로 표기할 수 있습니다.

from tqdm import tqdm
from time import sleep

from tqdm import trange

pbar = tqdm(["a 처리중", "b 처리중", "c 처리중", "d 처리중"])
for char in pbar:
    sleep(0.45)
    pbar.set_description("Processing %s" % char)
    


#실행결과    
#Processing b 처리중:  50%|█████     | 2/4 [00:02<00:02,  1.46s/it]
Processing d 처리중: 100%|██████████| 4/4 [00:01<00:00,  2.17it/s]
    

tqdm()을  with문을 사용하여 처리할 수 도 있습니다.

with tqdm(total=100) as pbar:
    for i in range(10):
        sleep(0.1)
        pbar.update(10)


#실행결과
100%|██████████| 100/100 [00:01<00:00, 90.14it/s]

다음과 같은 방법으로도 사용할 수 있습니다.

from tqdm import tqdm
from time import sleep
 
pbar = tqdm(total=100)
for i in range(10):
    sleep(0.1)
    pbar.update(10)
pbar.close()


#실행결과
100%|██████████| 100/100 [00:01<00:00, 90.39it/s]

 

■중첩 된 진행률 프로그레스 바 (Nested progress bars)

from tqdm import tqdm
# from tqdm.auto import tqdm  # notebook compatible
import time
for i1 in tqdm(range(2)):
    for i2 in tqdm(range(100)):
        # do something, e.g. sleep
        time.sleep(0.01)
        
        
#실행결과
  0%|          | 0/2 [00:00<?, ?it/s]
  0%|          | 0/100 [00:00<?, ?it/s]
  7%|▋         | 7/100 [00:00<00:01, 62.50it/s]
 14%|█▍        | 14/100 [00:00<00:01, 63.00it/s]
 21%|██        | 21/100 [00:00<00:01, 63.48it/s]
 28%|██▊       | 28/100 [00:00<00:01, 63.52it/s]
 35%|███▌      | 35/100 [00:00<00:01, 63.79it/s]
 42%|████▏     | 42/100 [00:00<00:00, 63.81it/s]
 49%|████▉     | 49/100 [00:00<00:00, 63.59it/s]
 56%|█████▌    | 56/100 [00:00<00:00, 63.91it/s]
 63%|██████▎   | 63/100 [00:00<00:00, 64.12it/s]
 70%|███████   | 70/100 [00:01<00:00, 64.21it/s]
 77%|███████▋  | 77/100 [00:01<00:00, 64.00it/s]
 84%|████████▍ | 84/100 [00:01<00:00, 63.88it/s]
 91%|█████████ | 91/100 [00:01<00:00, 63.94it/s]
100%|██████████| 100/100 [00:01<00:00, 63.95it/s]
 50%|█████     | 1/2 [00:01<00:01,  1.56s/it]
  0%|          | 0/100 [00:00<?, ?it/s]
  7%|▋         | 7/100 [00:00<00:01, 66.00it/s]
 14%|█▍        | 14/100 [00:00<00:01, 65.13it/s]
 21%|██        | 21/100 [00:00<00:01, 64.62it/s]
 28%|██▊       | 28/100 [00:00<00:01, 64.93it/s]
 35%|███▌      | 35/100 [00:00<00:01, 64.42it/s]
 42%|████▏     | 42/100 [00:00<00:00, 64.26it/s]
 49%|████▉     | 49/100 [00:00<00:00, 64.24it/s]
 56%|█████▌    | 56/100 [00:00<00:00, 63.47it/s]
 63%|██████▎   | 63/100 [00:00<00:00, 64.35it/s]
 70%|███████   | 70/100 [00:01<00:00, 64.35it/s]
 77%|███████▋  | 77/100 [00:01<00:00, 64.11it/s]
 84%|████████▍ | 84/100 [00:01<00:00, 64.11it/s]
 91%|█████████ | 91/100 [00:01<00:00, 64.23it/s]
100%|██████████| 100/100 [00:01<00:00, 64.14it/s]
100%|██████████| 2/2 [00:03<00:00,  1.56s/it]
from tqdm.auto import trange
from time import sleep

for i in trange(4, desc='1st loop'):
    for j in trange(5, desc='2nd loop'):
        for k in trange(50, desc='3rd loop', leave=False):
            sleep(0.01)
            
            
#실행결과
1st loop:   0%|          | 0/4 [00:00<?, ?it/s]
2nd loop:   0%|          | 0/5 [00:00<?, ?it/s]

3rd loop:   0%|          | 0/50 [00:00<?, ?it/s]

3rd loop:  14%|█▍        | 7/50 [00:00<00:00, 64.45it/s]

3rd loop:  28%|██▊       | 14/50 [00:00<00:00, 64.37it/s]

3rd loop:  42%|████▏     | 21/50 [00:00<00:00, 64.29it/s]

3rd loop:  56%|█████▌    | 28/50 [00:00<00:00, 63.90it/s]

3rd loop:  70%|███████   | 35/50 [00:00<00:00, 63.81it/s]

3rd loop:  84%|████████▍ | 42/50 [00:00<00:00, 63.59it/s]

3rd loop:  98%|█████████▊| 49/50 [00:00<00:00, 63.72it/s]

                                                         
2nd loop:  20%|██        | 1/5 [00:00<00:03,  1.28it/s]

3rd loop:   0%|          | 0/50 [00:00<?, ?it/s]

3rd loop:  14%|█▍        | 7/50 [00:00<00:00, 64.27it/s]

3rd loop:  28%|██▊       | 14/50 [00:00<00:00, 64.36it/s]

3rd loop:  42%|████▏     | 21/50 [00:00<00:00, 63.80it/s]

3rd loop:  56%|█████▌    | 28/50 [00:00<00:00, 63.76it/s]

3rd loop:  70%|███████   | 35/50 [00:00<00:00, 63.64it/s]

3rd loop:  84%|████████▍ | 42/50 [00:00<00:00, 63.58it/s]

3rd loop:  98%|█████████▊| 49/50 [00:00<00:00, 63.37it/s]

                                                         
2nd loop:  40%|████      | 2/5 [00:01<00:02,  1.27it/s]

3rd loop:   0%|          | 0/50 [00:00<?, ?it/s]

3rd loop:  14%|█▍        | 7/50 [00:00<00:00, 63.81it/s]

3rd loop:  28%|██▊       | 14/50 [00:00<00:00, 63.72it/s]

3rd loop:  42%|████▏     | 21/50 [00:00<00:00, 63.85it/s]

3rd loop:  56%|█████▌    | 28/50 [00:00<00:00, 63.78it/s]

3rd loop:  70%|███████   | 35/50 [00:00<00:00, 64.09it/s]

3rd loop:  84%|████████▍ | 42/50 [00:00<00:00, 64.06it/s]

3rd loop:  98%|█████████▊| 49/50 [00:00<00:00, 64.14it/s]

                                                         
2nd loop:  60%|██████    | 3/5 [00:02<00:01,  1.28it/s]

3rd loop:   0%|          | 0/50 [00:00<?, ?it/s]
...........이하 생략

[REFERENCE]

pypi.org/project/tqdm/

github.com/tqdm/tqdm#nested-progress-bars

stackoverflow.com/questions/23113494/double-progress-bar-in-python

 

[더 많은 예제 스크립트 보기]

Python tqdm.tqdm() Examples

 

[파이썬 더 알아보기]

[프로그래밍/Python] – [Python] 파이썬 코드 실행시간(시:분:초) 측정하는 방법 예제 총정리: time(), timedelta(),process_time(), perf_counter(),default_timer()

 

[Python] 파이썬 코드 실행시간(시:분:초) 측정하는 방법 예제 총정리: time(), timedelta(),process_time(), pe

개발을 하다보면 소스 코드들 중 어느 부분에서 동작 시간이 오래 걸리는지 체크해야할 때가 있어요. 어느 부분에서 오래 걸리는지를 체크해서 코드 리팩토링과 같은 작업을 하거나 오래걸리는

playground.naragara.com

[프로그래밍/Python] – [Python] 파이썬에서 웹브라우저(url) 호출하는 방법 : webbrower, selenium

 

[Python] 파이썬에서 웹브라우저(url) 호출하는 방법 : webbrower, selenium

파이썬에서 url를 크롬 브라우저로 호출하는 방법이 있습니다. webbrowser 모듀를 import 하여 브러우저를 호출할 수 있습니다. webbrowser 모듈의 open()메소드를 사용하면 기본 브라우저의 새차으로 url

playground.naragara.com

 

Leave a Reply

error: Content is protected !!