다음 코드가있는 경우 :
for x in range(10):
print x
나는 출력을 얻을 것이다
1
2
etc..
내가하고 싶은 것은 줄 바꿈을 인쇄하는 대신 이전 값을 바꾸고 같은 줄의 새 값으로 덮어 쓰는 것입니다.
답변
한 가지 방법은 캐리지 리턴 ( '\r'
) 문자를 사용하여 다음 행으로 이동하지 않고 행의 시작으로 돌아가는 것입니다.
for x in range(10):
print '{0}\r'.format(x),
print
print 문 끝에있는 쉼표는 다음 행으로 이동하지 않도록 지시합니다. 마지막 print 문은 다음 줄로 이동하므로 프롬프트가 최종 출력을 덮어 쓰지 않습니다.
최신 정보
이제 Python 2가 EOL이므로 Python 3 답변이 더 합리적입니다. Python 3.5 이하의 경우 :
for x in range(10):
print('{}\r'.format(x), end="")
print()
Python 3.6 이상에서는 f- 문자열이 더 잘 읽 힙니다.
for x in range(10):
print(f'{x}\r', end="")
print()
답변
Google을 통해 여기에 왔지만 Python 3을 사용하고 있으므로 Python 3에서 작동하는 방법은 다음과 같습니다.
for x in range(10):
print("Progress {:2.1%}".format(x / 10), end="\r")
여기 관련 답변 : print 문 뒤에 줄 바꿈을 어떻게 억제 할 수 있습니까?
답변
@Mike DeSimone 답변은 아마도 대부분의 경우 작동합니다. 그러나…
for x in ['abc', 1]:
print '{}\r'.format(x),
-> 1bc
이것은 '\r'
유일한 줄의 시작 부분으로 돌아가지만 출력을 지우지 않기 때문입니다.
편집 : 더 나은 솔루션 (아래의 이전 제안보다)
POSIX 지원이 충분하다면 다음은 현재 줄을 지우고 커서를 시작 부분에 둡니다.
print '\x1b[2K\r',
ANSI 이스케이프 코드를 사용하여 터미널 라인을 지 웁니다. 더 많은 정보는 위키피디아 와이 훌륭한 강연 에서 찾을 수 있습니다 .
이전 답변
내가 찾은 (그다지 좋지 않은) 해결책은 다음과 같습니다.
last_x = ''
for x in ['abc', 1]:
print ' ' * len(str(last_x)) + '\r',
print '{}\r'.format(x),
last_x = x
-> 1
한 가지 장점은 창문에서도 작동한다는 것입니다.
답변
이 스레드를 방문하기 전에 동일한 질문이있었습니다. 나를 위해 sys.stdout.write는 버퍼를 올바르게 플러시하는 경우에만 작동했습니다.
for x in range(10):
sys.stdout.write('\r'+str(x))
sys.stdout.flush()
플러시하지 않고 결과는 스크립트 끝 부분에만 인쇄됩니다.
답변
개행을 억제하고 인쇄하십시오 \r
.
print 1,
print '\r2'
또는 stdout에 쓰십시오.
sys.stdout.write('1')
sys.stdout.write('\r2')
답변
이 시도:
import time
while True:
print("Hi ", end="\r")
time.sleep(1)
print("Bob", end="\r")
time.sleep(1)
그것은 나를 위해 일했습니다. end="\r"
부분은 이전 줄을 덮어하고있다.
경고!
를 인쇄 hi
한 다음를 hello
사용하여 인쇄 하면 출력이 이전 두 글자를 덮어 썼기 때문에 \r
얻을 수 hillo
있습니다. hi
공백으로 인쇄하면 (여기에 표시되지 않음) hi
. 이 문제를 해결하려면을 사용하여 공백을 인쇄하십시오 \r
.
답변
이 페이지의 어떤 솔루션도 IPython 에서 작동하도록 할 수 없었지만 @ Mike-Desimone의 솔루션에 대한 약간의 변형이 작업을 수행했습니다. 캐리지 리턴으로 줄을 종료하는 대신 캐리지 리턴으로 줄을 시작 합니다.
for x in range(10):
print '\r{0}'.format(x),
또한이 방법에는 두 번째 print 문이 필요하지 않습니다.