Как перезаписать предыдущую печать в стандартный вывод?
Если бы у меня был следующий код:
for x inrange(10): print(x)
Я бы получил вывод
1 2 etc..
Что я хотел бы сделать, так это вместо вывода новой строки заменить предыдущее значение и перезаписать его новым значением в той же строке.
Переведено автоматически
Ответ 1
Простая версия
Один из способов - использовать символ возврата каретки ('\r'), чтобы вернуться к началу строки, не переходя к следующей строке.
Python 3
for x inrange(10): print(x, end='\r') print()
Прямая совместимость с Python 2.7
from __future__ import print_function for x inrange(10): print(x, end='\r') print()
Python 2.7
for x inrange(10): print'{}\r'.format(x), print
Python 2.0-2.6
for x inrange(10): print'{0}\r'.format(x), print
В последних двух случаях (только для Python 2) запятая в конце инструкции print указывает не переходить к следующей строке. Оператор last print переходит к следующей строке, поэтому ваше приглашение не перезапишет конечный результат.
Очистка строки
Если вы не можете гарантировать, что новая строка текста не короче существующей, то вам просто нужно добавить escape-последовательность “очистить до конца строки”, '\x1b[1K' ('\x1b' = ESC):
for x inrange(75): print('*' * (75 - x), x, end='\x1b[1K\r') print()
Перенос длинной строки
Все эти методы предполагают, что вы записываете не больше длины строки. Возврат каретки возвращает только к началу текущей строки, поэтому, если ваш вывод длиннее строки, вы сотрете только последнюю строку.
Если это настолько серьезная проблема, что вам нужно ее контролировать, вы можете отключить перенос строк, чтобы курсор не переносился на следующую строку. (Вместо этого курсор зацикливается на конце строки, а последующие символы перезаписываются.)
Перенос строк отключен с помощью print('\x1b[7l', end='') и повторно включен с помощью print('\x1b[7h', end=''). Обратите внимание, что автоматического повторного включения переноса строк в любой момент нет: не оставляйте терминал неработоспособным, если исключение завершает работу вашей программы!
Ответ 2
Поскольку я попал сюда через Google, но использую Python 3, вот как это будет работать в Python 3:
for x inrange(10): print("Progress {:2.1%}".format(x / 10), end="\r")