[Python] 파이썬 프로그레스바(Progress Bar) tqdm 사용 방법 : nested progress bar
파이썬 모듈을 명령프롬프트창에서 pip istall 모듈 명령어로 실행하면 진행상태바가 나타납니다. 0%에서 시작해서 100%에 도달하는 프로그레스바(Progress Bar)를 보셨을 겁니다. 프로그레스바를 사용하기위해 tqdm모듈을 사용합니다. 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]
github.com/tqdm/tqdm#nested-progress-bars
stackoverflow.com/questions/23113494/double-progress-bar-in-python
[더 많은 예제 스크립트 보기]
[파이썬 더 알아보기]
[프로그래밍/Python] – [Python] 파이썬에서 웹브라우저(url) 호출하는 방법 : webbrower, selenium