ホームページ >バックエンド開発 >Python チュートリアル >以前の出力を上書きせずに、Python でカスタマイズ可能なターミナル テキスト プログレス バーを作成する方法

以前の出力を上書きせずに、Python でカスタマイズ可能なターミナル テキスト プログレス バーを作成する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-03 09:44:14114ブラウズ

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

ブロック文字を含むターミナル テキストの進行状況バー

問題:

コンソール アプリケーションで、進行状況を表示するにはどうすればよいですか?ファイルが ftplib を使用してアップロードまたはダウンロードされるときに、以前に印刷されたものを妨げることなくバーが表示されます。 text?

解決策:

コンソール出力を保持しながら更新するカスタマイズ可能な進行状況バーを作成するには、次の点を考慮してください:

オプション 1 :単一呼び出し

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

使用例:

import time

items = list(range(57))

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

オプション 2: 複数呼び出し

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

例使用法:

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)

どちらのオプションも、以前のコンソール出力を上書きせずに動的に更新されるカスタマイズ可能な進行状況バーを提供します。

以上が以前の出力を上書きせずに、Python でカスタマイズ可能なターミナル テキスト プログレス バーを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。