Python 3
Ein einfacher, anpassbarer Fortschrittsbalken
Hier finden Sie eine Zusammenfassung vieler der unten aufgeführten Antworten, die ich regelmäßig verwende (keine Importe erforderlich).
Anmerkung: Der gesamte Code in dieser Antwort wurde für Python 3 erstellt; siehe Ende der Antwort, um diesen Code mit Python 2 zu verwenden.
# Print iterations progress
def printProgressBar (iteration, total, prefix = '', suffix = '', decimals = 1, length = 100, fill = '', printEnd = "\r"):
"""
Call in a loop to create terminal progress bar
@params:
iteration - Required : current iteration (Int)
total - Required : total iterations (Int)
prefix - Optional : prefix string (Str)
suffix - Optional : suffix string (Str)
decimals - Optional : positive number of decimals in percent complete (Int)
length - Optional : character length of bar (Int)
fill - Optional : bar fill character (Str)
printEnd - Optional : end character (e.g. "\r", "\r\n") (Str)
"""
percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
filledLength = int(length * iteration // total)
bar = fill * filledLength + '-' * (length - filledLength)
print(f'\r{prefix} |{bar}| {percent}% {suffix}', end = printEnd)
# Print New Line on Complete
if iteration == total:
print()
Verwendungsbeispiele
import time
# A List of Items
items = list(range(0, 57))
l = len(items)
# Initial call to print 0% progress
printProgressBar(0, l, prefix = 'Progress:', suffix = 'Complete', length = 50)
for i, item in enumerate(items):
# Do stuff...
time.sleep(0.1)
# Update Progress Bar
printProgressBar(i + 1, l, prefix = 'Progress:', suffix = 'Complete', length = 50)
Beispielhafte Ausgabe
Progress: |-----| 90.0% Complete
Update
In den Kommentaren wurde über eine Option diskutiert, die es ermöglicht, den Fortschrittsbalken dynamisch an die Breite des Terminalfensters anzupassen. Ich empfehle dies zwar nicht, aber hier ist eine . die diese Funktion implementiert (und auf die Vorbehalte hinweist).
Einzelaufruf-Version des oben genannten
In einem Kommentar wurde auf eine schöne Antwort als Antwort auf eine ähnliche Frage gepostet. Mir gefiel die Benutzerfreundlichkeit, die darin demonstriert wurde, und ich schrieb eine ähnliche Antwort, verzichtete aber auf den Import der sys
Modul, wobei einige der Funktionen des ursprünglichen printProgressBar
Funktion oben.
Zu den Vorteilen dieses Ansatzes gegenüber der obigen Originalfunktion gehören der Wegfall des ersten Funktionsaufrufs, um den Fortschrittsbalken bei 0 % zu drucken, und die Verwendung von enumerate
wird optional (d.h. sie ist nicht mehr ausdrücklich erforderlich, damit die Funktion funktioniert).
def progressBar(iterable, prefix = '', suffix = '', decimals = 1, length = 100, fill = '', printEnd = "\r"):
"""
Call in a loop to create terminal progress bar
@params:
iterable - Required : iterable object (Iterable)
prefix - Optional : prefix string (Str)
suffix - Optional : suffix string (Str)
decimals - Optional : positive number of decimals in percent complete (Int)
length - Optional : character length of bar (Int)
fill - Optional : bar fill character (Str)
printEnd - Optional : end character (e.g. "\r", "\r\n") (Str)
"""
total = len(iterable)
# Progress Bar Printing Function
def printProgressBar (iteration):
percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
filledLength = int(length * iteration // total)
bar = fill * filledLength + '-' * (length - filledLength)
print(f'\r{prefix} |{bar}| {percent}% {suffix}', end = printEnd)
# Initial Call
printProgressBar(0)
# Update Progress Bar
for i, item in enumerate(iterable):
yield item
printProgressBar(i + 1)
# Print New Line on Complete
print()
Verwendungsbeispiele
import time
# A List of Items
items = list(range(0, 57))
# A Nicer, Single-Call Usage
for item in progressBar(items, prefix = 'Progress:', suffix = 'Complete', length = 50):
# Do stuff...
time.sleep(0.1)
Beispielhafte Ausgabe
Progress: |-----| 90.0% Complete
Python 2
Um die oben genannten Funktionen in Python 2 zu verwenden, setzen Sie die Kodierung am Anfang Ihres Skripts auf UTF-8:
# -*- coding: utf-8 -*-
Und ersetzen Sie die Python 3 String-Formatierung in dieser Zeile:
print(f'\r{prefix} |{bar}| {percent}% {suffix}', end = printEnd)
Mit Python 2 String-Formatierung:
print('\r%s |%s| %s%% %s' % (prefix, bar, percent, suffix), end = printEnd)
0 Stimmen
Sieht aus wie ein Duplikat dieser gestern gestellten Frage: stackoverflow.com/questions/3160699/python-progress-bar/3162864 Sie sollten also Fisch verwenden pypi.python.org/pypi/fish
37 Stimmen
"Verwenden Sie einfach eine grafische Benutzeroberfläche" verkennt, dass grafische Benutzeroberflächen in einigen Situationen (schnelle Lernkurve, Ad-hoc-Sondierungs- oder interaktive oder einmalige Aktivitäten) großartig sind, während Befehlszeilentools für andere Situationen großartig sind (erfahrene Benutzer, die Ad-hoc-Anwendungen im Handumdrehen zusammenstellen, um eine sorgfältig definierte Operation viele Male durchzuführen).
31 Stimmen
Ich habe für die Wiedereröffnung gestimmt. Die Frage scheint mir nicht zu weit gefasst zu sein.
2 Stimmen
Ich denke, was Sie suchen, ist tqdm ... obwohl ich auch nicht weiß, warum SO mich dazu auffordert, Abstimmungen über ein Jahr alte Fragen erneut zu öffnen.
0 Stimmen
Ich denke, hier ist die beste Antwort wenn Sie kein externes Paket wünschen.
0 Stimmen
Warum verwenden Sie nicht einfach einen coolen Fortschrittsbalken, in dem Sie den Durchsatz und die voraussichtliche Ankunftszeit sehen und sogar eine Pause einlegen können, alles mit sehr coolen Animationen! Hier: github.com/rsalmei/alive-progress ! Demo
0 Stimmen
Siehe auch die Unterstützung des FiraCode-Fortschrittsbalkens .