이번 포스팅에서는 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)
아래와 같이 변수에 할당해서 사용할 수도 있다. 단, 반복문 뒤에 close를 사용하는 것을 tqdm 문서에는 강력하게 권장하고 있다.
pbar = tqdm(range(10)) ## tqdm 객체 생성
for i in pbar:
time.sleep(0.01)
pbar.close() ## 반복이 끝나고 close 사용 강력 권장
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)
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)
'프로그래밍 > Python' 카테고리의 다른 글
파이썬(Python) - 클래스(객체) 속성 존재 확인, 속성 변경하기, 속성 값 확인, 속성 삭제 (feat. hasattr, setattr, getattr, delattr) (3) | 2022.09.26 |
---|---|
파이썬(Python) 셋(Set)에 대하여 알아보기 (33) | 2022.09.22 |
파이썬(Python) 튜플(Tuple)과 리스트(List)의 공통점과 차이점 (0) | 2022.09.19 |
파이썬(Python) 데코레이터(Decorator)에 대해서 알아보자 (feat. @) (0) | 2022.09.19 |
파이썬(Python) 리스트(List) 정렬하기 (feat. sort, sorted) (0) | 2022.09.17 |
댓글