Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mencipta Bar Kemajuan Teks Terminal yang Boleh Disesuaikan dalam Python tanpa Mengganti Output Sebelumnya?

Bagaimana untuk Mencipta Bar Kemajuan Teks Terminal yang Boleh Disesuaikan dalam Python tanpa Mengganti Output Sebelumnya?

Patricia Arquette
Patricia Arquetteasal
2024-12-03 09:44:14190semak imbas

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

Bar Kemajuan Teks Terminal dengan Aksara Blok

Masalah:

Dalam aplikasi konsol, bagaimana seseorang boleh memaparkan kemajuan bar semasa fail dimuat naik atau dimuat turun menggunakan ftplib, tanpa mengganggu cetakan sebelum ini teks?

Penyelesaian:

Untuk mencipta bar kemajuan boleh disesuaikan yang dikemas kini sambil mengekalkan output konsol, pertimbangkan perkara berikut:

Pilihan 1 : Panggilan Tunggal

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

Contoh Penggunaan:

import time

items = list(range(57))

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

Pilihan 2: Berbilang Panggilan

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

Contoh Penggunaan:

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)

Kedua-dua pilihan menyediakan bar kemajuan yang boleh disesuaikan yang dikemas kini secara dinamik tanpa menulis ganti konsol sebelumnya keluaran.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Bar Kemajuan Teks Terminal yang Boleh Disesuaikan dalam Python tanpa Mengganti Output Sebelumnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn