Prosty, konfigurowalny pasek postępu
Oto podsumowanie wielu poniższych odpowiedzi, z których regularnie korzystam (import nie jest wymagany).
# 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('\r%s |%s| %s%% %s' % (prefix, bar, percent, suffix), end = printEnd)
# Print New Line on Complete
if iteration == total:
print()
Uwaga: dotyczy Python 3; zobacz komentarze, aby uzyskać szczegółowe informacje na temat korzystania z tego w Python 2.
Przykładowe użycie
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)
Przykładowe dane wyjściowe:
Progress: |█████████████████████████████████████████████-----| 90.0% Complete
Aktualizacja
W komentarzach była dyskusja na temat opcji, która pozwala dynamicznie dostosowywać pasek postępu do szerokości okna terminala. Chociaż nie polecam tego, oto podstawa, która implementuje tę funkcję (i zwraca uwagę na zastrzeżenia).