Barra di avanzamento in Python

Manav Narula 15 ottobre 2021
  1. Usa il modulo tdqm in Python per creare barre di avanzamento
  2. Usa il modulo progressbar in Python per creare barre di avanzamento
  3. Creare la propria funzione in Python per creare barre di progresso
Barra di avanzamento in Python

Nel mondo della programmazione, lavoriamo con grandi volumi di codice. Un programma potrebbe richiedere molto tempo per essere compilato ed eseguito. Pertanto, è un po’ utile sapere quanti progressi sono stati compiuti e il tempo stimato per il completamento del programma. Per tali situazioni, possiamo usare le barre di avanzamento in Python. Inoltre, possono aiutarci a identificare se il nostro programma si è interrotto o meno.

In Python, abbiamo molte librerie disponibili che possono aiutarci a creare una semplice barra di avanzamento per il nostro programma per aiutarci in questo. Discuteremo ogni metodo uno per uno in questo tutorial.

Usa il modulo tdqm in Python per creare barre di avanzamento

La libreria tdqm dispone di una struttura rapida ed efficiente per la creazione di barre di avanzamento di base. Funziona bene su terminale, notebook Python ed è compatibile con Windows, Linux e macOS.

Nel codice seguente creiamo una semplice barra di avanzamento utilizzando le funzioni di questo modulo.

from time import sleep
from tqdm import tqdm

for i in tqdm(range(10)):
    sleep(0.2)

Si itera attraverso un bucle e ad ogni iterazione viene incrementata anche la barra di avanzamento. La funzione sleep() è usata per mettere in pausa il compilatore per alcuni secondi specificati. Nota che per impostazione predefinita, la barra mostra il tempo rimanente, le iterazioni al secondo e la percentuale.

Di tutti i moduli discussi in questo tutorial, questo ha il minimo sovraccarico.

Usa il modulo progressbar in Python per creare barre di avanzamento

Il modulo progressbar fa quasi tutto come il modulo tdqm. Oltre a questo, ha opzioni per animare la barra di avanzamento e utilizzare i widget visualizzati sulla barra di avanzamento.

Il codice seguente mostra un esempio di ciò.

import time
import progressbar

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

La progressbar2 esiste anche in Python ed è un fork della progressbar. È estremamente popolare grazie alle sue funzionalità potenti e personalizzabili. Supporta anche istruzioni di stampa con la barra di avanzamento. Al rovescio della medaglia, questo modulo non è stato mantenuto per anni.

Nota che sono disponibili più librerie come alive-progress, progress che possono aiutare a creare le barre di avanzamento, ma queste due sono le più usate. L’unica differenza tra loro sono le animazioni e altre personalizzazioni offerte da queste librerie.

Creare la propria funzione in Python per creare barre di progresso

Possiamo anche creare una semplice funzione che possa assomigliare a una barra di avanzamento. Il codice seguente implementa questo.

import time
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()


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

Produzione:

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

Calcoliamo le iterazioni totali richieste e su ogni iterazione incrementiamo il simbolo # e lo stampiamo.

Autore: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn