如何保持Python打印不添加换行符或空格?

在Python中,如果我说

print 'h' 

我得到字母h和换行符。 如果我说

 print 'h', 

我得到字母h,没有换行符。 如果我说

 print 'h', print 'm', 

我得到字母h,空格和字母m。 我怎样才能防止Python打印空间?

打印语句是相同的循环不同的迭代,所以我不能只使用+运算符。

您可以使用:

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

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

 print('h', end='') 

压制终结者的终结者

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

禁止项目之间的空白分隔符。

格雷格是正确的 – 你可以使用sys.stdout.write

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

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

或者使用一个+ ,即:

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

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

 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

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

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

打印helloworld !

但是对于大多数情况下使用stdout.write()可能更方便。

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

  print 'h', print '\bm' 

重新控制您的控制台! 只是:

 from __past__ import printf 

其中__past__.py包含:

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

然后:

 >>> printf("Hello, world!\n") Hello, world! >>> printf("%d %d %d\n", 0, 1, 42) 0 1 42 >>> printf('a'); printf('b'); printf('c'); printf('\n') abc >>> 

附加奖励:如果您不喜欢print >> f, ... ,则可以将此caper扩展到fprintf(f,…)。

我不添加新的答案。 我只是把最好的标记答案放在一个更好的格式。 我可以看到,评分最好的答案是使用sys.stdout.write(someString) 。 你可以试试这个:

  import sys Print = sys.stdout.write Print("Hello") Print("World") 

会产生:

 HelloWorld 

就这些。

在python 2.6中:

 >>> print 'h','m','h' hmh >>> 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 >>> 

因此,使用__future__中的print_function可以显式设置打印函数的sepend参数。

您可以使用打印,如C中的printf函数

例如

打印“%s%s”%(x,y)

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

 print "a", print "b", 

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

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

这将打印a0b 。 你如何解释? 空间哪里去了?

我仍然无法弄清楚这里发生了什么。 有人可以看看我最好的猜测:

当你有一个尾随,在你的print上我试图推导出规则

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

不过,Python 2会注意你如何打印 – 你正在使用print ,还是使用sys.stdout.write或其他东西? 如果连续打两个电话,那么Python会坚持在两者之间放置一个空格。

 import sys a=raw_input() for i in range(0,len(a)): sys.stdout.write(a[i]) 
 print('''first line \ second line''') 

它会产生

一线二线

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

一旦我想从文件中读取一些数字,我也遇到了同样的问题。 我解决了这个问题:

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