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')