我想做几个语句,给出标准输出,而不会在语句之间看到换行符.
具体来说,假设我有:
for item in range(1,100):
print item
Run Code Online (Sandbox Code Playgroud)
结果是:
1
2
3
4
.
.
.
Run Code Online (Sandbox Code Playgroud)
如何让它看起来像:
1 2 3 4 5 ...
Run Code Online (Sandbox Code Playgroud)
更妙的是,是否可以打印单号在最后一个号码,所以只有一个号码在屏幕上在同一时间?
ewa*_*all 452
更改print item到:
print item, 在Python 2.7中print(item, end=" ") 在Python 3中如果要动态打印数据,请使用以下语法:
print(item, sep=' ', end='', flush=True) 在Python 3中zwo*_*wol 147
顺便说一下......如何每次刷新它以便在一个地方打印mi只需更改数字.
通常,这样做的方法是使用终端控制代码.这是一个特别简单的情况,你只需要一个特殊字符:U + 000D CARRIAGE RETURN,用'\r'Python(和许多其他语言)编写.以下是基于您的代码的完整示例:
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
Run Code Online (Sandbox Code Playgroud)
关于这一点的一些事情可能会令人惊讶:
\r去的字符串,这样的开始,程序运行时,光标会一直在数字后.这不仅仅是装饰性的:如果你以相反的方式做到这一点,一些终端模拟器会变得非常困惑.stdout.flush某些系统上是必要的,否则你不会得到任何输出.其他系统可能不需要它,但它不会造成任何伤害.如果您发现这不起作用,您首先应该怀疑的是您的终端模拟器是错误的.该vttest程序可以帮助你测试.
你可以stdout.write用一个print语句替换它,但我不想print直接使用文件对象.
Tim*_*ker 49
使用print item,使打印语句忽略换行符.
在Python 3中,它是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),
Run Code Online (Sandbox Code Playgroud)
在Python 3中,它有点复杂; 在这里你需要刷新,sys.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()
Run Code Online (Sandbox Code Playgroud)
Mat*_*hew 16
像其他例子一样,
我使用类似的方法,但不是花时间计算最后的输出长度等,
我只是使用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()
Run Code Online (Sandbox Code Playgroud)
要在迭代循环中使用,您只需调用以下内容:
x = 1
for f in fileList:
ProcessFile(f)
output = "File number %d completed." % x
Printer(output)
x += 1
Run Code Online (Sandbox Code Playgroud)
Eli*_*ght 14
您可以在print语句中添加一个尾随逗号,以便在每次迭代中打印空格而不是换行符:
print item,
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是Python 2.6或更高版本,则可以使用新的打印功能,这将允许您指定在每个打印项目的末尾都不会有空格(或者允许您指定任何结束想):
from __future__ import print_function
...
print(item, end="")
Run Code Online (Sandbox Code Playgroud)
最后,您可以通过从sys模块导入标准输出直接写入标准输出,该模块返回类似文件的对象:
from sys import stdout
...
stdout.write( str(item) )
Run Code Online (Sandbox Code Playgroud)
Bro*_*oks 11
更改
print item
Run Code Online (Sandbox Code Playgroud)
至
print "\033[K", item, "\r",
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
这么多复杂的答案。如果你有 python 3,只需放在\r打印的开头,然后添加end='', flush=True:
import time
for i in range(10):
print(f'\r{i} foo bar', end='', flush=True)
time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
这将在原地写入0 foo bar, then1 foo bar等。
小智 5
我认为简单的连接应该有效:
nl = []
for x in range(1,10):nl.append(str(x))
print ' '.join(nl)
Run Code Online (Sandbox Code Playgroud)
我在2.7上使用的另一个答案是打印“。”。每次循环运行(向用户指示事情还在运行)是这样的:
print "\b.",
Run Code Online (Sandbox Code Playgroud)
打印“。” 每个字符之间没有空格。看起来更好一点,并且效果很好。\ b是那些想知道的退格字符。
| 归档时间: |
|
| 查看次数: |
490327 次 |
| 最近记录: |