如何防止 Python 打印添加换行符或空格? [复制]
Posted
技术标签:
【中文标题】如何防止 Python 打印添加换行符或空格? [复制]【英文标题】:How do I keep Python print from adding newlines or spaces? [duplicate] 【发布时间】:2010-09-20 06:54:18 【问题描述】:在python中,如果我说
print 'h'
我得到字母 h 和换行符。如果我说
print 'h',
我得到字母 h 并且没有换行符。如果我说
print 'h',
print 'm',
我得到字母 h、空格和字母 m。如何防止 Python 打印空格?
打印语句是同一循环的不同迭代,所以我不能只使用 + 运算符。
【问题讨论】:
我目前的实验表明没有尾随空间。相反,它是一个前导空格当且仅当前面的输出操作是print
。要了解自己,请交替调用print '.',
和sys.stdout.write(',')
。这太疯狂了。为什么它要“记住”之前发生的事情,并相应地改变行为?
【参考方案1】:
在Python 3 中,使用
print('h', end='')
抑制结束线终止符,并且
print('a', 'b', 'c', sep='')
抑制项目之间的空格分隔符。见the documentation for print
【讨论】:
你可以在 Python 2.6 中from __future__ import print_function
from future import print_function 将破坏同一模块中使用旧语法的任何其他打印语句,因此虽然它比 sys.stdout.write 更优雅,但它可以更努力做出改变。
也很方便,如果需要覆盖最后一行,使用end='\r'
【参考方案2】:
import sys
sys.stdout.write('h')
sys.stdout.flush()
sys.stdout.write('m')
sys.stdout.flush()
您需要调用sys.stdout.flush()
,否则它会将文本保存在缓冲区中而您将看不到它。
【讨论】:
这对我很有用。当你准备好在屏幕上显示它时不要忘记执行 sys.stdout.flush() ,否则它会将它保存在缓冲区中而你不会看到它。我使用它来提供视觉反馈,表明脚本在经过很长时间或 for 循环时仍在运行。 如果打字有问题,别忘了你可以这样做:log = sys.stdout.write 要使用这个,你必须使用import sys
导入sys
作为这个成语的变体:prynt = lambda x : sys.stdout.write (str(x))
【参考方案3】:
Greg 是对的——你可以使用 sys.stdout.write
不过,也许您应该考虑重构您的算法以累积
lst = ['h', 'm']
print "".join(lst)
【讨论】:
作为这个成语的变体:print ''.join(map(str,[1, '+', 2, '=', 3]))
【参考方案4】:
或者使用+
,即:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
只要确保所有对象都是可连接的对象。
【讨论】:
或者,你可以转换它们:print str(me)+str(no)+str(likee)+str(spacees)+str(pls) 这仍然添加了一个换行符。【参考方案5】: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
。
【讨论】:
【参考方案6】:为了完整性,另一种方法是在执行写入后清除软空间值。
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
打印helloworld !
不过,在大多数情况下,使用 stdout.write() 可能更方便。
【讨论】:
根据documentation 这个属性不是用来控制打印语句,而是让打印的执行能够跟踪它的内部状态。【参考方案7】:这可能看起来很愚蠢,但似乎是最简单的:
print 'h',
print '\bm'
【讨论】:
这仍然添加了一个换行符。【参考方案8】:重新控制您的控制台!简单地说:
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, ...)。
【讨论】:
我喜欢这个:D。它的一个好处是它隐含地解决了"something %s" % x
的问题,其中x
是一个元组......【参考方案9】:
我没有添加新答案。我只是以更好的格式放置标记最好的答案。
我可以看到评分的最佳答案是使用sys.stdout.write(someString)
。你可以试试这个:
import sys
Print = sys.stdout.write
Print("Hello")
Print("World")
将产生:
HelloWorld
就是这样。
【讨论】:
【参考方案10】:在 python 2.6 中:
>>> 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
>>>
因此,使用 __future__ 中的 print_function,您可以显式设置打印函数的 sep 和 end 参数。
【讨论】:
【参考方案11】:您可以像 C 中的 printf 函数一样使用 print。
例如
打印 "%s%s" % (x, y)
【讨论】:
这仍然会在之后添加一个换行符。 OP 想在一个循环中多次调用 print 并且中间没有任何空格或换行符。【参考方案12】:print("012".format(a, b, c))
【讨论】:
这之后仍然会添加一个换行符。 OP 想在一个循环中多次调用 print 并且中间没有任何空格或换行符。 ... 但最好阅读格式文档:string — § Format String Syntax 和 Built-in Types — § String Methods — str.format【参考方案13】:sys.stdout.write
是(在 Python 2 中)唯一可靠的解决方案。 Python 2 打印太疯狂了。考虑这段代码:
print "a",
print "b",
这将打印a b
,导致您怀疑它正在打印尾随空格。但这是不正确的。试试这个:
print "a",
sys.stdout.write("0")
print "b",
这将打印a0b
。你怎么解释? 这些空间去哪儿了?
我仍然不能完全弄清楚这里到底发生了什么。有人可以看看我的最佳猜测:
当您的print
上有尾随,
时,我尝试推断规则:
首先,让我们假设print ,
(在 Python 2 中)不打印任何空格(空格 或 换行符)。
然而,Python 2 确实会注意您的打印方式——您使用的是print
,还是sys.stdout.write
,还是别的什么?如果您对print
进行两次连续 调用,那么Python 将坚持在两者之间放置一个空格。
【讨论】:
【参考方案14】:print('''first line \
second line''')
它会产生
第一行第二行
【讨论】:
【参考方案15】:import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])
【讨论】:
Greg Hewgill 接受的答案已经提到 sys.stdout.write()。以上是关于如何防止 Python 打印添加换行符或空格? [复制]的主要内容,如果未能解决你的问题,请参考以下文章