본문 바로가기
프로그래밍/Python

파이썬(Python) tqdm 사용법 알아보기

by 부자 꽁냥이 2022. 9. 21.

이번 포스팅에서는 tqdm 사용법을 알아보려고 한다.

 

파이썬(Python)에서 반복 루프를 돌다 보면 진행이 얼마나 되었는지 Progress Bar를 통해 알 수 있다. 이처럼 반복문에서 진행률을 Progress Bar로 표현해주고 남은 시간 정보까지 알려주는 것이 바로 tqdm이다.

 

이제 구체적인 사용방법을 알아보자.


   tqdm 사용법을 알아보자

1) 기본

tqdm은 기본적으로 순회가능한 객체(리스트, 튜플, 이터레이터 등)를 첫 번째 인자로 넣어주고 for 문에 삽입하면 된다.

 

from tqdm import tqdm
import time

for i in tqdm(range(10)): ## tqdm 첫 번째 인자에 순회가능한 객체 전달
    time.sleep(0.01)

 

tqdm

 

아래와 같이 변수에 할당해서 사용할 수도 있다. 단, 반복문 뒤에 close를 사용하는 것을 tqdm 문서에는 강력하게 권장하고 있다.

 

pbar = tqdm(range(10)) ## tqdm 객체 생성
for i in pbar:
    time.sleep(0.01)
pbar.close() ## 반복이 끝나고 close 사용 강력 권장

 

tqdm


2) 꾸미기 : 추가 옵션

a. 기본 옵션 : 디스크립션, Progress Bar 폭, 모양 등

먼저 기본적인 옵션들을 알아보자.

 

iterable = ['a', 'b', 'c', 'd', 'e']
for i in tqdm(iterable, 
              total = len(iterable), ## 전체 진행수
              desc = 'Description', ## 진행률 앞쪽 출력 문장
              ncols = 70, ## 진행률 출력 폭 조절
              ascii = ' =', ## 바 모양, 첫 번째 문자는 공백이어야 작동
              leave = True, ## True 반복문 완료시 진행률 출력 남김. False 남기지 않음.
             ):
    time.sleep(0.2)

 

b. 동적으로 디스크립션 설정하기

set_description을 사용하면 동적으로 디스크립션(진행율 출력문 앞쪽)을 동적으로 바꿀 수 있다.

 

iterable = ['a', 'b', 'c', 'd', 'e']
pbar = tqdm(iterable, 
              total = len(iterable), ## 전체 진행수
              desc = 'Description', ## 진행률 앞쪽 출력 문장
              ncols = 100, ## 진행률 출력 폭 조절
              ascii = ' =', ## 바 모양, 첫 번째 문자는 공백이어야 작동
              leave = True, ## True 반복문 완료시 진행률 출력 남김. False 남기지 않음.
             )
for c in pbar:
    pbar.set_description(f'Current Character "{c}"') ## 또는 pbar.desc = f'Current Character "{c}"'
    time.sleep(0.2)
pbar.close()

 


3) 이중 루프(Nested Loop)

'for 문'이 연속으로 두 개 이상 있는 경우를 Nested Loop라 하는데 이 경우에 대해서 Progress Bar 두 줄을 잘 정렬해서 출력하는 방법을 알아보자. 

 

여기서는 터미널에서 실행하는 Visual Studio Code와 주피터 노트북에서 실행하는 경우를 나누어 살펴보겠다. 왜냐하면 각 환경마다 동작이 제대로 안될 수 있기 때문이다.

a. Visual Studio Code 

아래 코드는 2중 루프를 도는 Nested Loop를 나타낸 것이다. 이때 가장 바깥쪽 루프에 대한 진행률을 위쪽 줄에 출력하고 안쪽 루프에 대한 진행률을 그 아래에 출력하고자 한다. tqdm의 position 인자를 이용하여 바깥 루프에 대한 position을 0 안쪽 루프에 대한 position을 1로 설정한다. 이때 안쪽 루프가 완료되면 진행률 출력 부분을 지워주기 위해 leave=False로 했다. 안 그러면 이상하게 된다. 

 

from tqdm import tqdm

import time

for outer in tqdm([10, 20, 30, 40, 50], desc='outer', position=0): ## 출력되는 라인을 나타내는 position을 0 으로 두고
    for inner in tqdm(range(outer), desc='inner', position=1, leave=False): ## 안쪽 루프의 진행률 출력은 그 아랫줄인 position = 1 로 설정하는 것이다.
        time.sleep(0.01)

 

tqdm 이중 루프 중간 과정 - Visual Studio Code
tqdm 이중 루프 완료 - Visual Studio Code

 

b. 주피터 노트북(Jupyter Notebook)

이번엔 Jupyter Notebook에서 해보자. 위 코드에서 from tqdm을 from tqdm.notebook으로 바꿔주면 된다. 아마도 주피트 노트북 전용 tqdm인 듯하다.

 

from tqdm.notebook import tqdm
import time

for outer in tqdm([10, 20, 30, 40, 50], desc='outer', position=0):
    for inner in tqdm(range(outer), desc='inner', position=1, leave=False):
        time.sleep(0.01)

 

 

tqdm 이중 루프 중간 과정 - Jupyter Notebook

 

tqdm 이중 루프 완료 - Jupyter notebook


댓글


맨 위로