Maison > développement back-end > Tutoriel Python > Comment créer une barre de progression de texte de terminal personnalisable en Python sans écraser la sortie précédente ?

Comment créer une barre de progression de texte de terminal personnalisable en Python sans écraser la sortie précédente ?

Patricia Arquette
Libérer: 2024-12-03 09:44:14
original
118 Les gens l'ont consulté

How to Create a Customizable Terminal Text Progress Bar in Python without Overwriting Previous Output?

Barre de progression du texte du terminal avec caractères de bloc

Problème :

Dans une application console, comment afficher une progression barre lorsque les fichiers sont téléchargés ou téléchargés à l'aide de ftplib, sans perturber l'impression préalable texte ?

Solution :

Pour créer une barre de progression personnalisable qui se met à jour tout en préservant la sortie de la console, considérez ce qui suit :

Option 1 : Appel unique

def progressBar(iterable, prefix="", suffix="", decimals=1, length=100, fill="█", printEnd="\r"):
    """
    Single-call progress bar function.

    Args:
        iterable (Iterable): Iteratable object.
        prefix (str): Prefix string.
        suffix (str): Suffix string.
        decimals (int): Number of decimals in percent complete.
        length (int): Character length of bar.
        fill (str): Fill character.
        printEnd (str): End character.
    """
    total = len(iterable)

    def printProgressBar(iteration):
        percent = "{0:.{1}f}".format(100 * (iteration / float(total)), decimals)
        filledLength = int(length * iteration // total)
        bar = fill * filledLength + "-" * (length - filledLength)
        print(f"\r{prefix} |{bar}| {percent}% {suffix}", end=printEnd)

    printProgressBar(0)
    for i, item in enumerate(iterable):
        yield item
        printProgressBar(i + 1)
    print()
Copier après la connexion

Exemple Utilisation :

import time

items = list(range(57))

for item in progressBar(items, prefix="Progress:", suffix="Complete", length=50):
    # Do stuff...
    time.sleep(0.1)
Copier après la connexion

Option 2 : appels multiples

def printProgressBar(iteration, total, prefix="", suffix="", decimals=1, length=100, fill="█", printEnd="\r"):
    """
    Progress bar printing function.

    Args:
        iteration (int): Current iteration.
        total (int): Total iterations.
        prefix (str): Prefix string.
        suffix (str): Suffix string.
        decimals (int): Number of decimals in percent complete.
        length (int): Character length of bar.
        fill (str): Fill character.
        printEnd (str): End character.
    """
    percent = "{0:.{1}f}".format(100 * (iteration / float(total)), decimals)
    filledLength = int(length * iteration // total)
    bar = fill * filledLength + "-" * (length - filledLength)
    print(f"\r{prefix} |{bar}| {percent}% {suffix}", end=printEnd)

    if iteration == total:
        print()
Copier après la connexion

Exemple d'utilisation :

import time

items = list(range(57))

# Initial call to print 0% progress
printProgressBar(0, len(items), prefix="Progress:", suffix="Complete", length=50)

for i, item in enumerate(items):
    # Do stuff...
    time.sleep(0.1)
    printProgressBar(i + 1, len(items), prefix="Progress:", suffix="Complete", length=50)
Copier après la connexion

Les deux options fournissent des barres de progression personnalisables qui se mettent à jour dynamiquement sans écraser la sortie précédente de la console.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal