Python: как печатать на одной строке, очищая предыдущий текст?

В Python вы можете печатать в той же строке, используя \r, чтобы вернуться к началу строки.

Это хорошо работает для индикаторов выполнения или увеличения счетчиков precentage, например: Печать на Python в той же строке

Однако при печати строк, которые могут уменьшаться по длине, это оставляет текст предыдущей строки там, например:

import sys
for t in ['long line', '%']:
    sys.stdout.write(t + '\r')
sys.stdout.write('\n')

Выводит текст терминала как: %ong line.

Каков наилучший способ записи более короткой строки после более длинной при печати в одну строку?

Ответ 1

Я думаю, что самый простой способ сделать это - написать пробелы над символами. Для этого было бы неплохо написать столько пробелов, сколько нужно для последней строки. Пример:

previousLength = 0
for t in ["long line", "%"]:
    print(" " * previousLength, end="\r") 
    print(t, end="\r")

    previousLength = len(t)

print("\n")

Ответ 2

Наряду с \r необходима ansi-последовательность \033[K - стирайте до конца строки.

Этот код работает так, как ожидалось.

import sys
for t in ['long line', '%']:
    sys.stdout.write('\033[K' + t + '\r')
sys.stdout.write('\n')