Python:使用回车和逗号打印无效

32
我需要在循环中打印一行输出(Python 3.x)。我已经在 Stack Overflow 上找了一些相关的内容,并加入了以下代码行到我的代码中:
```html

I need to print over one line in a loop (Python 3.x). Looking around on SO already, I put this line in my code:

```
print('{0} imported\r'.format(tot),)

然而,当被循环时仍会打印多行。我也尝试过

sys.stdout.write('{0} imported\r'.format(tot))

但是这并没有将 任何内容 输出到控制台...

有人知道这是怎么回事吗?


sys.stdout.write() 对我来说可行..你需要 import sys。你是想在同一行上叠加输出吗? - Levon
如果您想要在Python 2.x中获得与print text相同的效果,您需要使用end参数,例如print(text, end='')。函数参数末尾的逗号没有任何影响。 - James
2
不确定是“来自2.x”。print(text, end='')这行代码在等号处给我一个语法错误。 - rossmcm
3个回答

41

如果你想覆盖上一行的内容,需要添加\r(回车符),并在end=""中设置为空,这样你就不会进入下一行。

values = range(0, 100)
for i in values:
    print ("\rComplete: ", i, "%", end="")
print ("\rComplete: 100%")

32

在第一种情况下,一些系统会将 \r 视为换行符。在第二种情况下,您没有 flush 该行。尝试这样做:

sys.stdout.write('{0} imported\r'.format(tot))
sys.stdout.flush()

Levon提醒我们,在所有系统上都不需要刷新行,但是使用\r时通常这样做是个好主意。


@kevlar1818 正如我在评论中提到的那样,这对我有用(甚至没有刷新输出缓冲区)...奇怪。 - Levon
sys.stdout.flush() 是我所需要的。谢谢! - kevlar1818

15

我更喜欢使用Jan的解决方案,但是用这种方式:

values = range(0, 101)
for i in values:
  print ("Complete: ", i, "%", end="\r")
print ()

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