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!