[파이썬] python 프로그레스바(Progress Bar) 사용 방법

명령프롬프트창(CMD)에서 pip install 명령어를 실행하면 설치과정의 진행상태바가 나타납니다.

0%에서 시작해서 100%에 도달하는 프로그레스바(Progress Bar)를 보셨죠?.

프로그레스바를 사용하기위해 tqdm모듈을 설치 후 사용하면 되는데요

tqdm 설치 방법 부터 사용법까지 알아볼까요?

tqdm 라이브러리 설치 및 사용방법

1. 파이썬 tqdm 설치방법

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

pip install tqdm

2. 파이썬 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]

3. 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

카테고리 글 더 보기

error: Content is protected !!