关于print:如何防止python print添加换行符或空格?

How do I keep Python print from adding newlines or spaces?

本问题已经有最佳答案,请猛点这里访问。

在Python中,如果我说

1
print 'h'

我收到了字母H和一个换行符。如果我说

1
print 'h',

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

1
2
print 'h',
print 'm',

我得到了字母h,一个空格和字母m。我怎样才能阻止python打印空格呢?

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


只是一个评论。在python 3中,您将使用

1
print('h', end='')

取消结束行终止符,以及

1
print('a', 'b', 'c', sep='')

取消项目之间的空白分隔符。


你可以使用:

1
2
sys.stdout.write('h')
sys.stdout.write('m')


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

不过,也许您应该考虑重构您的算法,以积累一个列表,然后

1
2
lst = ['h', 'm']
print "".join(lst)


或者使用+,即:

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

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


1
2
3
4
5
6
7
8
Python 2.5.2 (r252:60911, Sep 27 2008, 07:03:14)
[GCC 4.3.1] on linux2
Type"help","copyright","credits" or"license" for more information.
>>> import sys
>>> print"hello",; print"there"
hello there
>>> print"hello",; sys.stdout.softspace=False; print"there"
hellothere

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


为了完整性,另一种方法是在执行写入之后清除软空间值。

1
2
3
4
5
import sys
print"hello",
sys.stdout.softspace=0
print"world",
print"!"

打印helloworld !

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


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

1
2
    print 'h',
    print '\bm'


重新控制你的控制台!简单地说:

1
from __past__ import printf

其中,__past__.py包含:

1
2
3
import sys
def printf(fmt, *varargs):
    sys.stdout.write(fmt % varargs)

然后:

1
2
3
4
5
6
7
8
9
10
>>> printf("Hello, world!
"
)
Hello, world!
>>> printf("%d %d %d
"
, 0, 1, 42)
0 1 42
>>> printf('a'); printf('b'); printf('c'); printf('
'
)
abc
>>>

额外奖励:如果您不喜欢print >> f, ...,您可以将此资本支出扩展到fprintf(f,…)。


我没有添加新的答案。我只是把最好的答案用更好的格式。我可以看出,最好的答案是使用sys.stdout.write(someString)。你可以试试这个:

1
2
3
4
    import sys
    Print = sys.stdout.write
    Print("Hello")
    Print("World")

收益率:

1
HelloWorld

仅此而已。


在Python 2.6中:

1
2
3
4
5
6
7
8
9
>>> 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
>>>

因此,使用"打印"功能,您可以显式设置打印功能的sep和end参数。


您可以像c中的printf函数那样使用print。

例如

打印"%s%s"%(x,y)


1
print("{0}{1}{2}".format(a, b, c))


sys.stdout.write是(在python 2中)唯一可靠的解决方案。python 2打印太疯狂了。考虑此代码:

1
2
print"a",
print"b",

这将打印a b,导致您怀疑它正在打印一个尾随空格。但这是不正确的。试试这个:

1
2
3
print"a",
sys.stdout.write("0")
print"b",

这将打印a0b。你怎么解释?空间去哪儿了?

我还是搞不清楚到底发生了什么。有人能看看我的最佳猜测吗?

当你的print上有一个尾随的,时,我试图推断规则:

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

然而,python 2是否注意到了打印的方式——您使用的是print还是sys.stdout.write,或者其他什么?如果您连续两次调用print,那么python将坚持在两者之间放置一个空格。


1
2
3
4
import sys
a=raw_input()
for i in range(0,len(a)):
       sys.stdout.write(a[i])


1
2
print('''first line \
second line'''
)

它会产生

first line second line


我曾经有过同样的问题,我想从一个文件中读取一些数字。我是这样解决的:

1
2
3
f = open('file.txt', 'r')
for line in f:  
    print(str.split(line)[0])