如何防止 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,您可以显式设置打印函数的 sepend 参数。

【讨论】:

【参考方案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 打印添加换行符或空格? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSS 防止列表项中的换行符

python如何打印输出

Python程序笔记20230301

python语句中的 end=' ' 的作用

PythonStudy——如何使输出不换行

如何在Python中让两个print函数的输出打印在一行内