Mi Diario Python

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/

Í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:

    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:

    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) 
    
    

    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) 
    

    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")
    

    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) 
    

    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)  
    

    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)
    

    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) 
    

    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

    Salir de la versión móvil