[Python] tqdm nested progress bar 해보기

2020. 1. 4. 18:32분석 Python/Visualization

728x90

분석하다보면 Loop를 돌릴 일이 많고, 얼마나 진행했는지 보고 싶을 때가 있다.
nested 형태로 되어있는 형태에서 돌릴 때 폼이 예제다. jupyter notebook 버전과 command 버전 2개를 소개한다.
추가로 progress bar에 색깔을 넣어봤다. print를 중간에 하면 폼이 깨지기 때문에 보고자 하는 것은 log로 보내버렸다. 

Command Version

import time
import sys
from tqdm import trange
from IPython.display import clear_output
import random
from colorama import Fore
import logging 
import logging.handlers

log = logging.getLogger('sr_log')
log.setLevel(logging.DEBUG)
fileHandler = logging.FileHandler('./log.txt' , mode= "w")
log.addHandler(fileHandler)

# Cross-platform colored terminal text.
color_bars = [
    Fore.BLACK,
    Fore.RED,
    Fore.GREEN,
    Fore.YELLOW,
    Fore.BLUE,
    Fore.MAGENTA,
    Fore.CYAN,
    Fore.WHITE]

def do_something():
    time.sleep(1)

def do_another_something():
    time.sleep(0.1)

bar_format="{l_bar}%s{bar}%s{r_bar}" % (color_bars[2], Fore.RESET)

for i in trange(10 , file=sys.stdout, unit_scale=True , leave= True , 
                desc='outer loop' , bar_format = bar_format):
    do_something()
    form = random.sample(color_bars , 1 )[0]
    bar_format="{l_bar}%s{bar}%s{r_bar}" % (form, Fore.RESET)
    for j in trange(100,file=sys.stdout, leave= False , bar_format = bar_format , 
                    unit_scale=True, desc='inner loop'):
        do_another_something()
        if (j % 50 == 0) & (j>0) :
            log.info("hp")

            

NOTEBOOK Version

from tqdm.notebook import trange, tqdm
from time import sleep

for i in trange(3, desc='1st loop'):
    for j in tqdm(range(100), desc='2nd loop' , leave = False):
        sleep(0.01)

https://github.com/tqdm/tqdm

 

tqdm/tqdm

A Fast, Extensible Progress Bar for Python and CLI - tqdm/tqdm

github.com

 

728x90