Barras de progreso en las aplicaciones Python con tqdm

Si su programa tarda un tiempo en mostrar resultados, evite frustrar a los usuarios mostrando el progreso que está haciendo con las barras de progreso que nos aporta la librería tqdm.

Estos serán simples ejemplos para que tengas una idea de como se utiliza, para un mayor desarrollo del aprendizaje puedes pasarte por la documentación oficial: https://tqdm.github.io/docs/tqdm/

Mostrar barras de progreso en las aplicaciones Python con tqdm
Índice

Introducción

Cuando estamos instalando diferentes aplicaciones, cargando una página o realizando una transacción, siempre nos tranquiliza ver esa pequeña barra de progreso que nos brinda una estimación de cuánto tiempo tardará el proceso en completarse o renderizarse. Si tenemos una barra de progreso simple en nuestro código, se verá muy agradable a la vista y le dará la retroalimentación adecuada al usuario cada vez que ejecuta el código. Para ésto podemos utilizar la biblioteca externa de Python tqdm, para crear barras de progreso simples y sin problemas que puede agregar en su código y hacer que se vea animado.

Instalación

Para instalarlo utilizamos PIP, abrimos la terminal o dentro de nuestro entorno virtual y escribimos:

  • pip install tqdm

Ejemplos de barras de progreso normal

Usar tqdm es muy simple, solo necesita agregar su código entre la función tqdm() después de importar la biblioteca en su código. Debemos asegurarnos de que el código que coloquemos dentro de la función tqdm() sea iterable o no funcionará.

Veamos el siguiente ejemplo que nos ayudará a compender mejor lo dicho:

from tqdm import tqdm

for i in tqdm(range(int(9000000))):
    pass

Si ejecutamos el código deberíamos obtener una salida como la siguiente:

Ejemplo con tqdm y python, barras de progreso

Para aclarar, range(int(9000000)) es el iterable que le pasamos a la función. El tipo range en Python es una clase que se utiliza para representar una secuencia inmutable de números.

Agregamos el parámetro "desc"

Ahora veremos otro ejemplo agregando el parámetro desc (Podemos utilizar este parámetro para especificar la descripción de nuestra barra de progreso)

Sintaxis: tqdm(self, iterable, desc = "El texto que tu quieras")

from tqdm import tqdm 
from time import sleep 

for i in tqdm(range(0, 100), desc ="El texto que tu quieras"): 
    sleep(.1) 

Ejemplo con desc en tqdm, barras de progreso

Agregamos el parámetro "total"

Ahora para el siguiente ejemplo utilizaremos el parámetro total (se utiliza para especificar el número total de iteraciones esperadas si aún no se ha especificado o necesita modificación)

Sintaxis: tqdm(self, iterable, total = 500)

from tqdm import tqdm 
from time import sleep 

for i in tqdm(range(0, 100), total = 500, 
              desc ="El texto que tu quieras"): 
    sleep(.1) 
Ejemplo utilizando total en python y tqdm, barras de progreso

Agregamos el parámetro "disable"

El próximo ejemplo es utilizando el parámetro disable (Este parámetro se puede utilizar si deseamos desactivar completamente la barra de progreso)

Sintaxis: tqdm(self, iterable, disable=True)

from tqdm import tqdm 
from time import sleep 
  
for i in tqdm(range(0, 100), disable = True, 
               desc ="El texto que tu quieras"): 
    sleep(.1) 
  
print("Iteration Successful")
Ejemplo utilizando disable en python y tqdm

Agregamos el parámetro "ncols"

Ejemplo con parámetro ncols (Este parámetro se utiliza para especificar todo el ancho del mensaje de salida. Si no se especifica, permanece dinámico al tamaño de la ventana. Esto se puede solucionar mediante el parámetro ncols)

Sintaxis: tqdm(self, iterable, ncols=100)

from tqdm import tqdm 
from time import sleep 
  
for i in tqdm(range(0, 100), ncols = 220, 
               desc ="El texto que tu quieras"): 
    sleep(.1) 
Ejemplo utilizando ncols en python y tqdm

Agregamos el parámetro "mininterval"

Ejemplo con parámetro mininterval (Podemos cambiar fácilmente la actualización mínima de la pantalla de progreso usando esta opción. El valor predeterminado es 0,1 segundos)

Sintaxis: tqdm(self, iterable, mininterval=3)

from tqdm import tqdm 
from time import sleep 
  
for i in tqdm(range(0, 100), mininterval = 3,  
              desc ="El texto que tu quieras"): 
    sleep(.1)

La salida es la misma que las anteriores, pero veras que la barra de progreso demora más en mostrarse y por lo tanto cuando se muestre será más avanzado su progreso.

Agregamos el parámetro "assii"

Ejemplo con parámetro assii (Podemos usar caracteres ASCII para llenar la barra de progreso según nuestro gusto)

Sintaxis: tqdm(self, iterable, asii="123456789$", desc="El texto que tu quieras")

from tqdm import tqdm 
from time import sleep 
  
for i in tqdm(range(0, 100),  
              ascii ="123456789$"): 
    sleep(.1)  
Ejemplo utilizando ASCII en python y tqdm

Agregamos el parámetro "unit"

Ejemplo con el parámetro unit (La unidad de tiempo predeterminada es "it" y se puede cambiar usando este parámetro a su unidad preferida)

Sintaxis: tqdm(self, iterable, unit="ticks")

from tqdm import tqdm 
from time import sleep 

for i in tqdm(range(0, 100), unit =" ticks",  
              desc ="El texto que tu quieras"): 
    sleep(.1)
Ejemplo utilizando unit en python y tqdm

Agregamos el parámetro "initial"

Ejemplo con el parámetro initial (El valor inicial de la barra de progreso comienza desde 0. Si desea cambiar esto, puede usar este parámetro para inicializar la barra de progreso desde el valor que desee)

Sintaxis: tqdm(self, iterable, initial=50)

from tqdm import tqdm 
from time import sleep 
  
for i in tqdm(range(0, 100), initial = 50,  
              desc ="El texto que tu quieras"): 
    sleep(.1) 
Ejemplo utilizando initial en python y tqdm

Espero que esta entrada les sea de ayuda y puedan incorporar las barras de progreso en sus códigos si son de cara a un usuario final.

Saludos, Diego

dcaraballo

Creador de @PythonDiario, amante de la Tecnología y la Naturaleza. Programador Python, C# . NET

  1. Lendon dice:

    Gran explicación, hace tiempo estaba buscando un modulo como este!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey