Manual con código para generar una barra de progreso en nuestro código para saber en que porcentaje de compleción estamos sin llenar el output con números. Muchos de los que usáis jupyter (el nuevo ipython notebooks) podéis imprimir por pantalla la iteración en la que vuestro loop reside. Eso es solo posible para una cantidad pequeña de iteraciones. Cuando llegamos a varios miles se puede generar un output bastante engorroso. Googleando un poco encontré la solución. Este código nos genera una clase que luego podemos llamar para obtener la barra de progreso junto con el porcentaje completado.

[code language=”python”] import sys, time try:     from IPython.core.display import clear_output     have_ipython = True except ImportError:     have_ipython = False

class ProgressBar:     def __init__(self, iterations):         self.iterations = iterations         self.prog_bar = ‘[]’         self.fill_char = ‘*’         self.width = 40         self.__update_amount(int(0))         if have_ipython:             self.animate = self.animate_ipython         else:             self.animate = self.animate_noipython

    def animate_ipython(self, iter):         try:             clear_output()         except Exception:             # terminal IPython has no clear_output             pass         print ‘\r’, self,         sys.stdout.flush(),         self.update_iteration(iter + 1)              def update_iteration(self, elapsed_iter):         self.__update_amount((elapsed_iter / float(self.iterations)) * 100.0)         self.prog_bar += ‘  %d of %s complete’ % (elapsed_iter, self.iterations)

    def __update_amount(self, new_amount):         percent_done = int(round((new_amount / 100.0) * 100.0))         all_full = int(self.width - 2)         num_hashes = int(round((percent_done / 100.0) * all_full))         self.prog_bar = ‘[’ + self.fill_char * num_hashes + ‘ ‘ * (all_full - num_hashes) + ‘]’         pct_place = int((len(self.prog_bar) / 2) - len(str(percent_done)))         pct_string = ‘%d%%’ % percent_done         self.prog_bar = self.prog_bar[0:pct_place] + \             (pct_string + self.prog_bar[pct_place + len(pct_string):])

    def __str__(self):         return str(self.prog_bar)         

[/code]

Y el siguiente código vemos un ejemplo de como llamaremos la clase para obtener la funcionalidad deseada

[code language=”python”] c = ProgressBar(1000) for i in range(1000):     c.animate_ipython(i) [/code]

Para los interesados encontré el código aquí.