Прийнята відповідь не є досконалою . Рядок, який був надрукований першим, залишиться там, і якщо ваш другий друк не охопить весь новий рядок, ви закінчите текст сміття.
Для ілюстрації проблеми збережіть цей код як сценарій та запустіть його (або просто подивіться):
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%