如何在没有换行符或空格的情况下打印

C中的示例:

for (int i = 0; i < 4; i++)printf(".");

输出:

....

在Python中:

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

在Python中,print将添加\n或空格。我如何避免这种情况?我想知道如何将字符串“追加”到stdout

2361069 次浏览

在Python 3中,您可以使用#2函数的sep=end=参数:

不要在字符串末尾添加换行符:

print('.', end='')

不要在要打印的所有函数参数之间添加空格:

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

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

如果您在缓冲方面遇到问题,您可以通过添加flush=True关键字参数来刷新输出:

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

python2.6和2.7

从Python 2.6中,您可以使用#1模块从Python 3导入print函数:

from __future__ import print_function

它允许您使用上面的Python 3解决方案。

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

你可以使用#0

import syssys.stdout.write('.')

你可能还需要打电话

sys.stdout.flush()

以确保stdout立即被刷新。

Python 3. x中的print函数有一个可选的end参数,可让您修改结尾字符:

print("HELLO", end="")print("HELLO")

输出:

你好你好

还有sep的分隔符:

print("HELLO", "HELLO", "HELLO", sep="")

输出:

你好你好

如果你想在Python 2. x中使用它,只需在文件的开始处添加它:

from __future__ import print_function

注意:这个问题的标题曾经是“如何在Python中打印”

由于人们可能会根据标题来这里寻找它,Python还支持printf样式的替换:

>>> strings = [ "one", "two", "three" ]>>>>>> for i in xrange(3):...     print "Item %d: %s" % (i, strings[i])...Item 0: oneItem 1: twoItem 2: three

而且,您可以轻松地将字符串值相乘:

>>> print "." * 10..........

如何在同一行打印:

import sysfor i in xrange(0,10):sys.stdout.write(".")sys.stdout.flush()

使用Python 2.6+(它还会破坏同一文件中任何现有的关键字打印语句)的Python 3风格打印函数。

# For Python 2 to use the print() function, removing the print keywordfrom __future__ import print_functionfor x in xrange(10):print('.', end='')

为了不破坏所有Python 2打印关键字,请创建一个单独的printf.py文件:

# printf.py
from __future__ import print_function
def printf(str, *args):print(str % args, end='')

然后,在您的文件中使用它:

from printf import printffor x in xrange(10):printf('.')print 'done'#..........done

更多显示printf样式的示例:

printf('hello %s', 'world')printf('%i %f', 10, 3.14)#hello world10 3.140000

我最近遇到了同样的问题……

我通过这样做解决了它:

import sys, os
# Reopen standard output with "newline=None".# in this mode,# Input:  accepts any newline character, outputs as '\n'# Output: '\n' converts to os.linesep
sys.stdout = os.fdopen(sys.stdout.fileno(), "w", newline=None)
for i in range(1,10):print(i)

这适用于Unix和Windows,但我没有在Mac OS X上测试过。

对于Python 2及更早版本,它应该像Re:如何在没有CR的情况下打印? byGuido van Rossum中描述的那样简单(转述):

是否有可能打印一些东西,但不自动有一个回车是什么?

是的,在要打印的最后一个参数后附加一个逗号。例如,此循环在以空格分隔的行上打印数字0…9。请注意添加最后换行符的无参数“print”:

>>> for i in range(10):...     print i,... else:...     print...0 1 2 3 4 5 6 7 8 9>>>

您可以在Python 3中执行相同的操作,如下所示:

#!usr/bin/python
i = 0while i<10 :print('.', end='')i = i+1

然后用python filename.pypython3 filename.py执行它。

在Python 2. x中,您可以在print函数的末尾添加,,因此它不会打印在新行上。

for i in xrange(0,10): print '\b.',

这在2.7.8和2.5.2(分别为EnthingCanopy和OS X终端)中都有效-无需模块导入或时间旅行。

lenooh满意我的查询。我在搜索“python抑制换行符”时发现了这篇文章。我正在Raspberry Pi上使用IDLE3PuTTY开发Python 3.2。

我想在PuTTY命令行上创建一个进度条。我不想让页面滚开。我想要一条水平线来让用户放心,不要因为程序没有停止运行或被发送到一个快乐的无限循环中去吃午饭而惊慌失措——作为对“别管我,我做得很好,但这可能需要一些时间”的恳求。交互式消息——就像文本中的进度条。

print('Skimming for', search_string, '\b! .001', end='')通过准备下一次屏幕写入来初始化消息,这将打印三个退格作为rubout,然后是一个句点,擦除'001'并延长句点行。

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

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

import sys
page=1search_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 forcedwhile page:# some stuff…# search, scrub, and build bulk output list[], count items,# set done flag Truepage=page+1 #done flag set in 'some_stuff'sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meatsys.stdout.flush()if done: #( flag alternative to break, exit or quit)print('\nSorting', item_count, 'items')page=0 # exits the 'while page' looplist.sort()for item_count in range(0, items)print(list[item_count])
#print footers hereif not (len(list)==items):print('#error_handler')

进度条的实质在sys.stdout.write('\b\b\b.'+format(page, '03'))行。首先,为了向左擦除,它将光标备份在三个数字字符上,并将\b\b\b作为rubout并删除一个新句点以添加到进度条长度。然后它写入到目前为止的页面的三位数字。因为sys.stdout.write()等待一个完整的缓冲区或输出通道关闭,所以sys.stdout.flush()强制立即写入。sys.stdout.flush()内置在print()的末尾,用print(txt, end='' )绕过。然后代码循环执行其平凡的时间密集型操作,同时不再打印任何内容,直到它返回此处擦除三位数,添加一个句点并再次写入三位数,递增。

擦除和重写的三个数字绝不是必要的-它只是一个繁荣的例子,它举例说明了sys.stdout.write()print()。你可以很容易地用一个句点做质数,忘记三个花哨的反斜杠-b backspace(当然也不写格式化的页数),只需每次将句点栏打印得更长一点-没有空格或换行符,只使用sys.stdout.write('.'); sys.stdout.flush()对。

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

使用functools.partial创建一个名为printf的新函数:

>>> import functools
>>> printf = functools.partial(print, end="")
>>> printf("Hello world\n")Hello world

用默认参数包装函数是一种简单的方法。

python3

print('.', end='')

python2.6+

from __future__ import print_function # needs to be first statement in fileprint('.', end='')

python<=2.5

import syssys.stdout.write('.')

如果每次打印后额外的空间是可以的,在Python 2中:

print '.',

误导在Python 2-避免中:

print('.'), # Avoid this if you want to remain sane# This makes it look like print is a function, but it is not.# This is the `,` creating a tuple and the parentheses enclose an expression.# To see the problem, try:print('.', 'x'), # This will print `('.', 'x') `

您想在进行循环中正确打印某些内容;但您不希望它每次都以新行打印…

例如:

 for i in range (0,5):print "hi"
OUTPUT:hihihihihi

但是您希望它像这样打印:嗨嗨嗨嗨嗨嗨嗨对吧???

只需在打印“hi”后添加逗号即可。

示例:

for i in range (0,5):print "hi",

输出:

hi hi hi hi hi

你可以试试:

import sysimport time# Keeps the initial message in buffer.sys.stdout.write("\rfoobar bar black sheep")sys.stdout.flush()# Wait 2 secondstime.sleep(2)# Replace the message with a new one.sys.stdout.write("\r"+'hahahahaaa             ')sys.stdout.flush()# Finalize the new message by printing a return carriage.sys.stdout.write('\n')

其中许多答案似乎有点复杂。在Python 3. x中,您只需这样做:

print(<expr>, <expr>, ..., <expr>, end=" ")

end的默认值是"\n"。我们只是将其更改为空格,或者您也可以使用end=""(无空格)来执行printf通常的操作。

在Python 3+中,#0是一个函数。当您调用

print('Hello, World!')

Python将其转换为

print('Hello, World!', end='\n')

您可以将end更改为您想要的任何内容。

print('Hello, World!', end='')print('Hello, World!', end=' ')

你会注意到上面所有的答案都是正确的。但是我想做一个捷径,总是在最后写"end="参数。

你可以定义一个函数,比如

def Print(*args, sep='', end='', file=None, flush=False):print(*args, sep=sep, end=end, file=file, flush=flush)

它将接受所有数量的参数。甚至它会接受所有其他参数,如file、flush等,并且具有相同的名称。

您不需要导入任何库。只需使用删除字符:

BS = u'\0008' # The Unicode point for the "delete" characterfor i in range(10):print(BS + "."),

这将删除换行符和空格(^_^)*。

一般来说,有两种方法可以做到这一点:

在Python 3. 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

Loop中的另一个例子

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

在Python 2. x中不带换行符打印

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

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

Loop中的另一个例子

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

您可以访问此链接

或者有一个函数,比如:

def Print(s):return sys.stdout.write(str(s))

那么现在:

for i in range(10): # Or `xrange` for the Python 2 versionPrint(i)

产出:

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

上面的代码给出了以下输出:

 01234

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

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

输出:

 0 1 2 3 4

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

 for i in range(0, 5): #setting the value of (i) in the range 0 to 5print(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)

python3:

print('Hello',end='')

示例:

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

输出:Hello world

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

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

输出:Hello,world

只需使用end=""或sep=""

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

输出:

.........

使用end=''

for i in range(5):print('a',end='')
# aaaaa