Se você está trabalhando com downloads de arquivos em Python usando a biblioteca urllib
, é comum precisar mostrar o progresso do download de forma clara e intuitiva para o usuário. Embora a função urllib.request.urlretrieve
ofereça um mecanismo de progresso básico, é possível melhorar a experiência ao exibir uma barra de progresso visual (como: ) diretamente na linha de comando. Vamos explorar como implementar isso de forma simples e eficaz.
📌 1. Mostrar Progresso de Forma Visual
Ao utilizar urllib.request.urlretrieve
, você pode usar o parâmetro reporthook
para monitorar o progresso do download. No entanto, o progresso é mostrado em formato de porcentagem, o que pode não ser tão intuitivo para o usuário. Para tornar isso mais visual, podemos criar uma barra de progresso que se atualize em tempo real.
📌 2. Usar \r
para Manter o Progresso na Mesma Linha
O caractere especial \r
(carriage return) permite que o cursor retorne ao início da linha, permitindo que o progresso seja atualizado dinamicamente sem quebrar a linha. Combinando isso com um loop de progresso, podemos exibir uma barra de progresso visual.
✅ Código com Barra de Progresso Visual
import urllib.request import os def barra_de_progresso(count, block_size, total_size): """ Função de callback para exibir uma barra de progresso visual. """ if total_size > 0: percent = (count * block_size) / total_size * 100 filled = int(percent // 10) # Calcula a porcentagem em blocos de 10% bar = "█" * filled + " " * (10 - filled) # Cria a barra de progresso print(f"\rProgresso: [{bar}] {percent:.2f}% ", end="") # Mantém a linha atualizada else: print(f"\rProgresso: {count * block_size} bytes transferidos", end="") # Exemplo de uso URL_ARQUIVO = "https://example.com/video.mp4" NOME_SALVAR = "video.mp4" PATH = os.path.join("/tmp", NOME_SALVAR) urllib.request.urlretrieve(URL_ARQUIVO, PATH, reporthook=barra_de_progresso)
📌 3. Como Funciona a Barra de Progresso
filled
: Calcula a porcentagem do progresso em blocos de 10% (ex: 30% → 3 blocos de█
).bar
: Concatena blocos de█
(preenchidos) e (espaços vazios) para formar a barra.\r
+end=""
: Mantém o progresso na mesma linha, atualizando-o a cada bloco transferido.
📌 4. Resultado Esperado
Ao executar o código acima, você verá algo como:
Progresso: [███████████ ] 75.00% Progresso: [████████████████] 100.00%
📌 5. Conclusão
Criar uma barra de progresso visual em Python com urllib
é simples e eficaz. A combinação de \r
e um loop de progresso permite que você exiba o status do download de forma clara e interativa. Se quiser, posso te ajudar a adaptar esse conceito para outros tipos de downloads ou até mesmo criar uma interface gráfica (como com tkinter
ou pygame
) para tornar a experiência ainda mais envolvente! 😊