인트로
tqdm을 쓰면 느려지는 것 같아서 자신은 잘 안쓴다는 선생님의 말씀을 듣고,
실제로 그러한지에 대한 테스트를 해본다.
사용 개념 : \r
tqdm을 살펴보면, 진행률을 한 줄로 표시함을 볼 수 있다.
그러므로 필요한 기술은, 연속된 출력에서 이전 출력 내용을 지우고 업데이트 하는
것.
간단한 기술로 가능한데, 바로 print 메서드에 \r
정규표현식을 이용하는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 그냥 print 사용해보기
print('1번입니다', end='')
print('2번입니다', end='')
-----------출력-----------
1번입니다2번입니다
# \r을 사용해 이전 출력내용 지우기
print('1번입니다', end='')
print('\r2번입니다', end='')
-----------출력-----------
2번입니다.
===> 1번입니다는 삭제되고, 2번입니다만 출력됨
- \r 정규표현식 : 앞쪽 출력물을 지운다.
- end = ‘’ : 줄바꿈 하지 않음. print의 파라미터로, 기본값은 ‘\n’(줄바꿈)으로 되어있다.
표현법 기초공사
1차 : 진행률 %로 표기해보기
1회 ~ 100회 동안 각 회마다 진행률%를 출력
하도록 했다.
time.sleep
을 이용해 0.1초 간격을 두고 각 회차가 진행된다.
1
2
3
4
5
import time
for i in range(101):
print(f'\r{i}%', end='')
time.sleep(0.1)
2차 : 진행률을 input num과 매칭하여 진행률 표기하기
진행 횟수인 fit_num에 대해 %로 표기
를 할 수 있게끔
(현재 진행횟수 / fit_num * 100)의 반올림 값을 표기하게 한다.
1
2
3
4
5
6
import time
fit_num = 51
for i in range(fit_num):
print(f'\r{round(i/(fit_num-1)*100)}%', end='')
time.sleep(0.1)
3차 : 좀 더 예쁘게 디자인해보기
진행된만큼 네모칸
이 채워지는 프로그레스바를 만들어보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import time
fit_num = 101
for i in range(fit_num):
n = round(i / ((fit_num-1)//10))
k = 10 - n
m = 1 if k > 0 else 0
print(f'\r{round(i/(fit_num-1)*100)}%',
'|',
'■ ' * n, '>' * m, ' .' * (k-1),
'|',
end='')
time.sleep(0.1)
To Do
실제 함수에 적용하기까지는 무리가 있다.
이후 보강 필요
레퍼런스
https://jellyho.com/blog/96/