Barra de progresso em Python

  1. Use o módulo tdqm em Python para criar barras de progresso
  2. Use o módulo progressbar em Python para criar barras de progresso
  3. Crie sua própria função em Python para criar barras de progresso

No mundo da programação, trabalhamos com grandes volumes de código. Um programa pode levar muito tempo para ser compilado e executado. Portanto, é um pouco útil saber quanto progresso foi feito e o tempo estimado de conclusão do programa. Para tais situações, podemos usar barras de progresso em Python. Além disso, eles podem nos ajudar a identificar se nosso programa foi interrompido no meio ou não.

Em Python, temos muitas bibliotecas disponíveis que podem nos ajudar a criar uma barra de progresso simples para nosso programa para nos ajudar com isso. Discutiremos cada método um por um neste tutorial.

Use o módulo tdqm em Python para criar barras de progresso

A biblioteca tdqm possui uma estrutura rápida e eficiente para a criação de barras de progresso básicas. Funciona bem em terminais, notebooks Python e é compatível com Windows, Linux e Mac OS.

No código a seguir, criamos uma barra de progresso simples usando funções deste módulo.

from time import sleep
from tqdm import tqdm
for i in tqdm(range(10)):
    sleep(0.2)

Iteramos por meio de um loop e, a cada iteração, a barra de progresso também é incrementada. A função sleep() é usada para pausar o compilador por alguns segundos especificados. Observe que, por padrão, a barra mostra o tempo restante, iterações por segundo e porcentagem.

De todos os módulos discutidos neste tutorial, este é o que tem menos sobrecarga.

Use o módulo progressbar em Python para criar barras de progresso

O módulo progressbar faz quase tudo como o módulo tdqm. Além disso, possui opções para animar sua barra de progresso e usar widgets exibidos na barra de progresso.

O código a seguir mostra um exemplo disso.

import time
import progressbar

for i in progressbar.progressbar(range(100)):
    time.sleep(0.02)

A progressbar2 também existe no Python e é um fork da progressbar. É extremamente popular devido aos seus recursos poderosos e personalizáveis. Ele também oferece suporte a instruções de impressão com a barra de progresso. Por outro lado, este módulo não é mantido há anos.

Observe que mais bibliotecas estão disponíveis como alive-progress, progress que podem ajudar a fazer as barras de progresso, mas essas duas são as mais usadas. A única diferença entre eles são as animações e outras personalizações que essas bibliotecas oferecem.

Crie sua própria função em Python para criar barras de progresso

Também podemos criar uma função simples que pode se assemelhar a uma barra de progresso. O código abaixo implementa isso.

import sys

def progressbar(it, prefix="", size=60, file=sys.stdout):
    count = len(it)
    def show(j):
        x = int(size*j/count)
        file.write("%s[%s%s] %i/%i\r" % (prefix, "#"*x, "."*(size-x), j, count))
        file.flush()
        file.write("\n")
    show(0)
    for i, item in enumerate(it):
        yield item
        show(i+1)
        file.write("\n")
    file.flush()
    
import time

for i in progressbar(range(15), "Computing: ", 40):
    time.sleep(0.1)

Resultado:

Computing: [........................................] 0/15
Computing: [##......................................] 1/15
Computing: [#####...................................] 2/15
Computing: [########................................] 3/15
Computing: [##########..............................] 4/15
Computing: [#############...........................] 5/15
Computing: [################........................] 6/15
Computing: [##################......................] 7/15
Computing: [#####################...................] 8/15
Computing: [########################................] 9/15
Computing: [##########################..............] 10/15
Computing: [#############################...........] 11/15
Computing: [################################........] 12/15
Computing: [##################################......] 13/15
Computing: [#####################################...] 14/15
Computing: [########################################] 15/15

Calculamos o total de iterações necessárias e, a cada iteração, incrementamos o símbolo # e o imprimimos.