如何在Python 3中替换打印的行

4
我正在尝试制作一种类似于秒表的东西,只是为了学习一些不同的东西。
问题在于,我不知道如何使得打印时间时,它只会替换掉你当前已经打印出来的时间。
例如,如果时间是:
H M S: 0 0 1
我希望它显示为:
H M S: 0 0 2
而不需要打印新的一行,这样看起来就像是在计数。我通过打印新行的方式实现了这一点,但仍然显示出一种移动的效果,这表明有新的行被打印了。
这是我目前的代码,请随意运行它,你会知道我的意思: http://notepad.cc/woupodi42 任何想法都将不胜感激,如果它们直接适用于这个问题,那就更好了 :)

1
我认为这就是\r的作用。 - Fabricator
我见过这种用法,但据我所知它并未替换该行,只是在其后追加。不过我可能错了。 - deano3663
3个回答

8

有一个超载的 print() 可以实现这一点。将其与 [\r][2] 结合使用,以在写入每个字符之前将光标移动到行首。

import time
for x in range(10):
    print('\r H M S 0 0 ' + str(x), end='')
    time.sleep(1)

或者

for x in range(10):
    print('\r H M S 0 0 {}'.format(x), end='')
    time.sleep(1)

这似乎并没有真正替换最后一个打印的行,只是添加了它? - deano3663
只需在您的代码行前加上 '\r' 即可重置光标。我会更新我的答案以显示这一点。 - Justin R.
我尝试运行了那段代码,但它似乎只是在同一行上打印,而不会删除已经打印的内容。可能是我太蠢了,你能否以某种方式将其放入示例中? - deano3663
它覆盖了当前行。我将使用确切的代码示例更新我的测试代码。 - Justin R.
如果我运行该代码,输出结果如下:H M S 0 0 0 H M S 0 0 1 H M S 0 0 2 H M S 0 0 3 H M S 0 0 4 H M S 0 0 5 H M S 0 0 6 H M S 0 0 7 H M S 0 0 8 H M S 0 0 9然而,它应该像数字时钟一样每次只显示一个东西。 - deano3663
显示剩余4条评论

4
使用end参数指定“\r”作为行结尾。
for x in range(10):
    print('\r H M S 0 0 ' + str(x), end="\r")
    time.sleep(1)

1

提示:你需要使用sys.stdout.write和\r

import sys, time
>>> for x in range(10):
...     sys.stdout.write('%d\r' % x)
...     sys.stdout.flush()
...     time.sleep(1)
... 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接