如何防止Python打印添加换行符或空格?

如何防止Python打印添加换行符或空格?,python,printing,formatting,python-2.x,Python,Printing,Formatting,Python 2.x,在python中,如果我说 print 'h' 我收到了字母h和换行符。如果我说 print 'h', 我收到了字母h,没有换行符。如果我说 print 'h', print 'm', 我得到了字母h,一个空格和字母m。如何防止Python打印空间 print语句是同一循环的不同迭代,所以我不能只使用+运算符 import sys sys.stdout.write('h') sys.stdout.flush() sys.stdout.write('m') sys.stdout.flus

在python中,如果我说

print 'h'
我收到了字母h和换行符。如果我说

print 'h',
我收到了字母h,没有换行符。如果我说

print 'h',
print 'm',
我得到了字母h,一个空格和字母m。如何防止Python打印空间

print语句是同一循环的不同迭代,所以我不能只使用+运算符

import sys

sys.stdout.write('h')
sys.stdout.flush()

sys.stdout.write('m')
sys.stdout.flush()
您需要调用,否则它会将文本保存在缓冲区中,您将看不到它。

在中,使用

要抑制端点终止符,请执行以下操作:

print('a', 'b', 'c', sep='')
抑制项目之间的空格分隔符。请参见

格雷格是对的——您可以使用sys.stdout.write

也许,你应该考虑重构你的算法来积累一个列表然后


但实际上,您应该直接使用
sys.stdout.write

为了完整起见,另一种方法是在执行写入操作后清除softspace值

import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
打印
helloworld


不过,在大多数情况下,使用stdout.write()可能更方便。

或使用
+
,即:

>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls

只需确保所有对象都是可连接的对象。

重新获得对控制台的控制权!简单地说:

from __past__ import printf
其中
\uuuuuuuuuuuuuuuuuuuuuuuuuuu.py
包含:

import sys
def printf(fmt, *varargs):
    sys.stdout.write(fmt % varargs)
然后:


额外奖励:如果您不喜欢f,…
,您可以将此caper扩展到fprintf(f,…。

这可能看起来很愚蠢,但似乎是最简单的:

    print 'h',
    print '\bm'

您可以像C中的printf函数一样使用print

e、 g

在python 2.6中打印“%s%s”%(x,y)

>>> print 'h','m','h'
h m h
>>> from __future__ import print_function
>>> print('h',end='')
h>>> print('h',end='');print('m',end='');print('h',end='')
hmh>>>
>>> print('h','m','h',sep='');
hmh
>>>

因此,使用来自“未来”的“打印”功能,您可以明确设置打印功能的sepend参数。

我不是在添加新答案。我只是把最好的答案放在一个更好的格式中。
print("{0}{1}{2}".format(a, b, c))
我可以看到最好的评分方法是使用
sys.stdout.write(someString)
。您可以尝试以下方法:

    import sys
    Print = sys.stdout.write
    Print("Hello")
    Print("World")
将产生:

HelloWorld

仅此而已。

sys.stdout.write是(在Python 2中)唯一健壮的解决方案。Python 2的打印是疯狂的。考虑这个代码:

print "a",
print "b",
这将打印
ab
,使您怀疑它打印的是尾随空格。但这是不对的。请尝试以下方法:

print "a",
sys.stdout.write("0")
print "b",
这将打印
a0b
。你怎么解释空间到哪里去了?

我还是不太明白这里到底发生了什么。有人能看看我的最佳猜测吗:

当您的
打印文件上有尾随
时,我尝试推断规则:

首先,假设
打印,
(在Python 2中)不打印任何空格(空格或换行符)

但是,Python2会注意您的打印方式—您使用的是
print
,还是
sys.stdout.write
,还是其他什么?如果连续两次调用
print
,Python将坚持在这两个调用之间留出一个空格

import sys
a=raw_input()
for i in range(0,len(a)):
       sys.stdout.write(a[i])
它将产生

一线二线


在Python 2.6from future import print函数中,您可以从uuu future uuu导入print_函数中
from future import print_函数将使用同一模块中的旧语法中断任何其他打印语句,因此虽然它比sys.stdout.write更优雅,但进行更改的工作量可能更大。此外,如果您需要覆盖最后一行,它也很方便,使用
end='\r'
或者,您可以将它们转换为:print str(me)+str(no)+str(likee)+str(spacees)+str(pls)。这仍然添加了一个新行。这对我来说非常有用。当您准备在屏幕上显示它时,不要忘记执行sys.stdout.flush(),否则它会将它保存在缓冲区中,您将看不到它。我用它来提供视觉反馈,当脚本运行很长一段时间或for循环时,它仍然在运行。如果键入是一个问题,不要忘记你可以做:log=sys.stdout.write要使用它,你必须使用
import sys
作为这个习惯用法的变体来导入
sys
prynt=lambda x:sys.stdout.write(str(x))
我喜欢这个:D。它的一个好处是它隐式地解决了
“某物%s”%x
的问题,其中
x
是一个元组……我目前的实验表明没有尾随空间。相反,当且仅当前面的输出操作是打印时,它才是前导空格。要查看您自己,请交叉调用
print'、
sys.stdout.write('、')
。这太疯狂了。为什么它要“记住”之前发生的事情,并相应地改变行为?这仍然添加了一个新行。Greg Hewgill接受的答案已经提到sys.stdout.write()。这之后仍然添加了一个新行。OP希望在循环中多次调用print,并且其间没有任何空格或换行符。这之后仍然会添加换行符。OP希望在循环中多次调用print,并且在循环之间没有任何空格或换行符……但最好阅读格式文档:根据此属性,不用于控制print语句,但要允许打印的实现跟踪其内部状态。作为此习惯用法的变体:
print'.join(map(str[1',+',2',=',3])
HelloWorld
print "a",
print "b",
print "a",
sys.stdout.write("0")
print "b",
import sys
a=raw_input()
for i in range(0,len(a)):
       sys.stdout.write(a[i])
print('''first line \
second line''')