考虑在Python中使用print的以下示例:

>>> for i in range(4): print('.')
.
.
.
.
>>> print('.', '.', '.', '.')
. . . .

在每个值之间添加换行符或空格。我怎样才能避免这种情况,从而使输出。。。。相反换句话说,如何将字符串“附加”到标准输出流?


当前回答

莱诺满足了我的要求。我在搜索“python suppress newline”时发现了这篇文章。我正在树莓派上使用IDLE 3为PuTTY开发Python 3.2。

我想在PuTTY命令行上创建一个进度条。我不希望页面滚动。我想要一条水平线,让用户放心,不要担心程序没有停止,也没有在一个快乐的无限循环中被送去吃午饭,以此恳求“离开我吧,我做得很好,但这可能需要一些时间。”交互式消息-如文本中的进度条。

打印('Shamming for',search_string,'\b!.001',end='')通过准备下一次屏幕写入来初始化消息,这将打印三个退格作为⌫\9003;\9003搓出,然后打印一个句点,删除“001”并延长句点行。

search_string鹦鹉学舌用户输入后,\b!修剪search_string文本的感叹号,使其位于print()强制的空格上方,并正确放置标点符号。然后是空格和我正在模拟的“进度条”的第一个“点”。

不必要的是,消息也会以页码开头(格式为三,带前导零),以通知用户正在处理进度,这也将反映我们稍后将在右侧构建的周期数。

import sys

page=1
search_string=input('Search for?',)
print('Skimming for', search_string, '\b! .001', end='')
sys.stdout.flush() # the print function with an end='' won't print unless forced
while page:
    # some stuff…
    # search, scrub, and build bulk output list[], count items,
    # set done flag True
    page=page+1 #done flag set in 'some_stuff'
    sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meat
    sys.stdout.flush()
    if done: #( flag alternative to break, exit or quit)
        print('\nSorting', item_count, 'items')
        page=0 # exits the 'while page' loop
list.sort()
for item_count in range(0, items)
    print(list[item_count])

#print footers here
if not (len(list)==items):
    print('#error_handler')

进度条肉在sys.stdout.write('\b\b\b.'+格式(第页,“03”)行中。首先,要向左擦除,它将光标备份到三个数字字符上,并将“\b\b\b”作为“⌫\9003 \9003;”,然后删除一个新的句点以添加到进度条长度。然后,它将写入到目前为止已完成的页面的三位数。因为sys.stdout.write()等待满缓冲区或输出通道关闭,所以sys.stdut.flush()强制立即写入。sys.stdout.flush()内置在打印结束()中,该结束被打印(txt,end='')绕过。然后,代码循环执行普通的时间密集型操作,而不打印任何内容,直到它返回此处,将三位数字擦回去,添加一个句点,然后再次写入三位数字,递增。

擦除和重写的三个数字绝非必要——这只是一个繁荣的例子,它是sys.stdout.write()与print()的对比。你也可以很容易地用句点填充,并忘记三个奇怪的反斜杠-b⌫退格(当然,也不写格式化的页计数),只需每次打印一个句点条,而不用空格或换行,只需使用sys.stdout.write('.');sys.stdout.flush()对。

请注意,Raspberry Pi IDLE 3 Python外壳不将退格视为⌫rubout,而是打印一个空格,创建一个明显的分数列表。

其他回答

在Python 3中,可以使用print函数的sep=和end=参数:

要不在字符串末尾添加换行符,请执行以下操作:

print('.', end='')

要在要打印的所有函数参数之间不添加空格,请执行以下操作:

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

您可以将任何字符串传递给任一参数,并且可以同时使用两个参数。

如果缓冲有问题,可以通过添加flush=True关键字参数来刷新输出:

print('.', end='', flush=True)

Python 2.6和2.7

从Python 2.6中,您可以使用__future__模块从Python 3导入打印函数:

from __future__ import print_function

这允许您使用上面的Python3解决方案。

但是,请注意,flush关键字在从Python 2中的__future__导入的打印函数版本中不可用;它只适用于Python 3,更具体地说是3.3及更高版本。在早期版本中,您仍然需要通过调用sys.stdout.flush()来手动刷新。您还需要在执行此导入的文件中重写所有其他打印语句。

或者可以使用sys.stdout.write()

import sys
sys.stdout.write('.')

您可能还需要致电

sys.stdout.flush()

以确保立即刷新stdout。

蟒蛇3:

print('Hello',end='')

例子:

print('Hello',end=' ')
print('world')

输出:你好,世界

此方法在提供的文本之间添加sperator:

print('Hello','world',sep=',')

输出:你好,世界

通常,有两种方法可以做到这一点:

在Python3.x中无换行打印

在print语句后不追加任何内容,并使用end=“”删除“\n”,如下所示:

>>> print('hello')
hello  # Appending '\n' automatically
>>> print('world')
world # With previous '\n' world comes down

# The solution is:
>>> print('hello', end='');print(' world'); # End with anything like end='-' or end=" ", but not '\n'
hello world # It seems to be the correct output

循环中的另一个示例:

for i in range(1,10):
    print(i, end='.')

在Python2.x中无换行打印

添加尾随逗号表示:打印后,忽略\n。

>>> print "hello",; print" world"
hello world

循环中的另一个示例:

for i in range(1,10):
    print "{} .".format(i),

您可以访问此链接。

 for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i)

上述代码给出以下输出:

 0    
 1
 2
 3
 4

但是,如果您想在一条直线上打印所有这些输出,那么您需要做的就是添加一个名为end()的属性来打印。

 for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i, end=" ")

输出:

 0 1 2 3 4

不仅是空格,还可以为输出添加其他结尾。例如

 for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i, end=", ")

输出:

 0, 1, 2, 3, 4, 

记得:

 Note: The [for variable in range(int_1, int_2):] always prints till the variable is 1

 less than it's limit. (1 less than int_2)

这里有三个代码供您选择:

print("".join(["." for i in range(4)]))

or

print("." + "." + "." + ".")

or

print(".", ".", ".", ".", sep="")