Python to print out status bar and percentage

ID : 20191

viewed : 13

Tags : pythonpython

Top 5 Answer for Python to print out status bar and percentage

vote vote

91

The '\r' character (carriage return) resets the cursor to the beginning of the line and allows you to write over what was previously on the line.

from time import sleep import sys  for i in range(21):     sys.stdout.write('\r')     # the exact output you're looking for:     sys.stdout.write("[%-20s] %d%%" % ('='*i, 5*i))     sys.stdout.flush()     sleep(0.25) 

I'm not 100% sure if this is completely portable across all systems, but it works on Linux and OSX at the least.

vote vote

89

There's a Python module that you can get from PyPI called progressbar that implements such functionality. If you don't mind adding a dependency, it's a good solution. Otherwise, go with one of the other answers.

A simple example of how to use it:

import progressbar from time import sleep bar = progressbar.ProgressBar(maxval=20, \     widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage()]) bar.start() for i in xrange(20):     bar.update(i+1)     sleep(0.1) bar.finish() 

To install it, you can use easy_install progressbar, or pip install progressbar if you prefer pip.

vote vote

74

I found useful library tqdm (https://github.com/tqdm/tqdm/, previously: https://github.com/noamraph/tqdm). It automatically estimates time of completion and can be used as iterator.

Usage:

import tqdm import time  for i in tqdm.tqdm(range(1000)):     time.sleep(0.01)     # or other long operations 

Results in:

|####------| 450/1000  45% [elapsed: 00:04 left: 00:05, 99.15 iters/sec] 

tqdm can wrap any iterable.

vote vote

60

You can use \r (carriage return). Demo:

import sys total = 10000000 point = total / 100 increment = total / 20 for i in xrange(total):     if(i % (5 * point) == 0):         sys.stdout.write("\r[" + "=" * (i / increment) +  " " * ((total - i)/ increment) + "]" +  str(i / point) + "%")         sys.stdout.flush() 
vote vote

57

Here you can use following code as a function:

def drawProgressBar(percent, barLen = 20):     sys.stdout.write("\r")     progress = ""     for i in range(barLen):         if i < int(barLen * percent):             progress += "="         else:             progress += " "     sys.stdout.write("[ %s ] %.2f%%" % (progress, percent * 100))     sys.stdout.flush() 

With use of .format:

def drawProgressBar(percent, barLen = 20):     # percent float from 0 to 1.      sys.stdout.write("\r")     sys.stdout.write("[{:<{}}] {:.0f}%".format("=" * int(barLen * percent), barLen, percent * 100))     sys.stdout.flush() 

Top 3 video Explaining Python to print out status bar and percentage

Related QUESTION?