import sys class ProgressBar: def __init__(self, num_elements): self.num_elements = num_elements self.current_element = 0 def show(self, msg=''): total_blocks = 10 blocks_done = ((self.current_element * total_blocks) // self.num_elements) blocks_to_go = total_blocks - blocks_done print('\r' # Go to the start of the line '\x1b[K' # Clear line '\x1b[0m' # Restart the "style" '\x1b[?7l' # Disable line wrapping '|' # Put the first "|" + blocks_done * '█' # Completed blocks + blocks_to_go * ' ' # Uncompleted blocks + '\x1b[7m|\x1b[0m' # End the bar + ' ' + msg # Add message + '\x1b[?7h' # Enable line wrapping + '\r', # Go back to the start end='') def next_iter(self, msg=''): self.current_element += 1 self.show(msg)