Принятый ответ не идеально . Строка, которая была напечатана первой, останется там, и если ваш второй оттиск не покрывает всю новую строку, вы получите текст мусора.
Чтобы проиллюстрировать проблему, сохраните этот код как скрипт и запустите его (или просто посмотрите):
import time
n = 100
for i in range(100):
for j in range(100):
print("Progress {:2.1%}".format(j / 100), end="\r")
time.sleep(0.01)
print("Progress {:2.1%}".format(i / 100))
Вывод будет выглядеть примерно так:
Progress 0.0%%
Progress 1.0%%
Progress 2.0%%
Progress 3.0%%
Что мне подходит, так это очистить линию перед тем, как оставить постоянную печать. Не стесняйтесь приспосабливаться к вашей конкретной проблеме:
import time
ERASE_LINE = '\x1b[2K' # erase line command
n = 100
for i in range(100):
for j in range(100):
print("Progress {:2.1%}".format(j / 100), end="\r")
time.sleep(0.01)
print(ERASE_LINE + "Progress {:2.1%}".format(i / 100)) # clear the line first
И теперь он печатает, как и ожидалось:
Progress 0.0%
Progress 1.0%
Progress 2.0%
Progress 3.0%