如何在同一行打印而不是换行?
基本上,我想做的事情和这个人正好相反...嘿嘿。
我有一个程序,它会告诉我进展到哪儿了。
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 ""
,这样才能确保最后有一个换行!