如何在同一行打印而不是换行?

117 投票
19 回答
185495 浏览
提问于 2025-04-16 02:24

基本上,我想做的事情和这个人正好相反...嘿嘿。

Python脚本:每次在终端打印新行,而不是更新现有行

我有一个程序,它会告诉我进展到哪儿了。

for i in some_list:
    #do a bunch of stuff.
    print i/len(some_list)*100," percent complete"

所以如果某个列表的长度是50,我就会看到最后一行打印了50次。我想要的是只打印一行,并且不断更新那一行。我知道这可能是你今天看到的最无聊的问题。我就是想不明白该在谷歌上搜索哪四个字才能找到答案。

更新!我试了mvds的建议,感觉是对的。新的代码是

print percent_complete,"           \r",

完成百分比只是一个字符串(我之前是抽象说的,现在我想说得更清楚点)。现在的结果是,它运行程序时什么都不打印,直到程序结束后,才在一行上打印“100%完成”。

如果没有换行符(但有逗号,mvds建议的一半),它在结束之前什么都不打印。然后打印:

0 percent complete     2 percent complete     3 percent complete     4 percent complete    

依此类推。所以现在的新问题是,有了逗号,它在程序完成之前不会打印任何东西。

有了换行符而没有逗号,它的表现和没有换行符也没有逗号时完全一样。

19 个回答

43

在Python 3.3及以上版本中,你不需要使用sys.stdout.flush()这个命令。你可以直接用print(string, end='', flush=True)来实现。

所以

print('foo', end='')
print('\rbar', end='', flush=True)

会把‘foo’替换成‘bar’。

44

对我来说,最有效的方法是结合了Remi和siriusd的回答:

from __future__ import print_function
import sys

print(str, end='\r')
sys.stdout.flush()
94

这叫做回车符,或者说是 \r

用法

print i/len(some_list)*100," percent complete         \r",

逗号的作用是防止打印的时候自动换行。(而空格可以让这一行和之前的输出保持干净)

另外,别忘了最后要加上 print "",这样才能确保最后有一个换行!

撰写回答