我想做几个语句,给出标准输出,而不看到换行之间的语句。
具体来说,假设我有:
for item in range(1,100):
print item
结果是:
1
2
3
4
.
.
.
如何让它看起来像:
1 2 3 4 5 ...
更好的是,是否可以将单个数字打印在最后一个数字之上,这样一次只有一个数字出现在屏幕上?
我想做几个语句,给出标准输出,而不看到换行之间的语句。
具体来说,假设我有:
for item in range(1,100):
print item
结果是:
1
2
3
4
.
.
.
如何让它看起来像:
1 2 3 4 5 ...
更好的是,是否可以将单个数字打印在最后一个数字之上,这样一次只有一个数字出现在屏幕上?
当前回答
In [9]: print?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in function print>
Namespace: Python builtin
Docstring:
print(value, ..., sep=' ', end='\n', file=sys.stdout)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
其他回答
顺便说一下......如何每次刷新它,所以它打印mi在一个地方,只是改变数字。
一般来说,这样做的方法是使用终端控制代码。这是一个特别简单的情况,你只需要一个特殊的字符:U+000D CARRIAGE RETURN,它在Python(和许多其他语言)中被写成'\r'。下面是一个基于你的代码的完整示例:
from sys import stdout
from time import sleep
for i in range(1,20):
stdout.write("\r%d" % i)
stdout.flush()
sleep(1)
stdout.write("\n") # move the cursor to the next line
有些事情可能会令人惊讶:
\r位于字符串的开头,以便在程序运行时,光标始终位于数字后面。这不仅仅是表面上的:如果你反过来做,一些终端模拟器会非常混乱。 如果您不包括最后一行,那么在程序终止后,shell将在数字上方打印提示符。 stdout。在某些系统上Flush是必要的,否则将得不到任何输出。其他系统可能不需要它,但它不会造成任何损害。
如果你发现这不起作用,你应该怀疑的第一件事是你的终端模拟器有bug。vttest程序可以帮助你测试它。
可以替换stdout。写与打印语句,但我不喜欢混合打印与直接使用文件对象。
使用print item,使print语句省略换行符。
在python3中,它是print(item, end=" ")。
如果你想让每个数字都显示在相同的位置,使用例如(Python 2.7):
to = 20
digits = len(str(to - 1))
delete = "\b" * (digits + 1)
for i in range(to):
print "{0}{1:{2}}".format(delete, i, digits),
在Python 3中,这有点复杂;这里你需要刷新系统。Stdout或者在循环结束之前它不会打印任何东西:
import sys
to = 20
digits = len(str(to - 1))
delete = "\b" * (digits)
for i in range(to):
print("{0}{1:{2}}".format(delete, i, digits), end="")
sys.stdout.flush()
我在2.7中使用的另一个答案是,每当循环运行时,我只是打印出一个“。”(向用户表明事情仍在运行):
print "\b.",
它输出“。”字符,每个字符之间没有空格。它看起来好一点,工作得很好。\b是一个退格字符。
实现这一点的最佳方法是使用\r字符
试试下面的代码:
import time
for n in range(500):
print(n, end='\r')
time.sleep(0.01)
print() # start new line so most recently printed number stays
和其他例子一样, 我使用类似的方法,但不是花时间计算最后的输出长度,等等,
我简单地使用ANSI代码转义移回行开始,然后在打印当前状态输出之前清除整行。
import sys
class Printer():
"""Print things to stdout on one line dynamically"""
def __init__(self,data):
sys.stdout.write("\r\x1b[K"+data.__str__())
sys.stdout.flush()
为了在你的迭代循环中使用,你只需要调用如下代码:
x = 1
for f in fileList:
ProcessFile(f)
output = "File number %d completed." % x
Printer(output)
x += 1
点击这里查看更多信息