如何打印没有换行或空间?

问题在于标题。

我想在Python中做我在这个例子中做的c :

#include <stdio.h> int main() { int i; for (i=0; i<10; i++) printf("."); return 0; } 

输出:

 .......... 

在Python中:

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

在Python print会添加一个\n或一个空格,我怎样才能避免这一点? 现在,这只是一个例子。 不要告诉我,我可以先build立一个string,然后打印出来。 我想知道如何“追加”string到stdout

一般的方法

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

您可能还需要打电话

 sys.stdout.flush() 

确保stdout立即刷新。

Python 2.6+

从Python 2.6中,您可以从Python 3导入printfunction:

 from __future__ import print_function 

这使您可以使用下面的Python 3解决scheme。

Python 3

在Python 3中, print语句已经变成了一个函数。 在Python 3中,你可以做:

 print('.', end='') 

这也适用于Python 2,前提是您已经使用from __future__ import print_function

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

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

它应该像Guido Van Rossum在这个环节所描述的那样简单:

回复:如何打印没有AC / R?

http://www.python.org/search/hypermail/python-1992/0115.html

是否有可能打印的东西,但不会自动有一个回车追加到它?

是的,在最后一个参数后面加一个逗号来打印。 例如,这个循环在由空格分隔的行上打印数字0..9。 注意添加最终换行符的无参数“打印”:

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

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

由于人们可能会根据标题来这里寻找,Python也支持printf风格的replace:

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

而且,您可以轻松地将string值相乘:

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

使用python2.6 +的python3风格的打印函数(也将打破同一个文件中的任何现有的keyworded打印语句。)

 # for python2 to use the print() function, removing the print keyword from __future__ import print_function for x in xrange(10): print('.', end='') 

为了不毁掉所有的python2打印关键字,请创build一个单独的printf.py文件

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

然后,在你的文件中使用它

 from printf import printf for 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 for i in xrange(0,10): sys.stdout.write(".") sys.stdout.flush() 

新的(Python 3.0的)打印函数有一个可选的结束参数,让你修改结束字符。 还有分隔符。

您可以在printfunction的最后添加,这样就不会在新行上打印。

使用functools.partial来创build一个名为printf的新函数

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

简单的方法来包装一个函数与默认参数。

在Python中的printfunction自动生成一个新的行。 你可以尝试:

print("Hello World", end="")

你可以用打印end参数来做到这一点。 在python3范围()返回迭代器和xrange()不存在。

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

你可以试试:

 import sys import time # Keeps the initial message in buffer. sys.stdout.write("\rfoobar bar black sheep") sys.stdout.flush() # Wait 2 seconds time.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') 

你想打印一些东西在for循环权;但是你不希望它每次都以新行打印。例如:

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

但你想它打印像这样:嗨嗨嗨嗨嗨右? 打印后只需添加一个逗号“hi”

例:

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

在Python 3中,打印是一个function。 你打电话时

 print ('hello world') 

Python将其翻译为

 print ('hello world', end = '\n') 

你可以改变任何你想要的。

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

Python的代码3.6.1

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

产量

 .......... >>> 

python 2.6+

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

python 3

 print('.', end='') 

python <= 2.5

 import sys sys.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') ` 

我最近有同样的问题..

我通过这样做来解决它:

 import sys, os # reopen stdout 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都有效…没有在macosx上testing过…

心连心

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

这将为你工作。 这里逗号(,)在打印后很重要。 得到以下帮助: http : //freecodeszone.blogspot.in/2016/11/how-to-print-in-python-without-newline.html

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

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

并用python filename.pypython3 filename.py

@lenooh满意我的查询。 我在search“python suppress newline”时发现了这篇文章。 我在Raspberry Pi上使用IDLE3为PuTTY开发Python 3.2。 我想在PuTTY命令行上创build一个进度条。 我不希望页面滚动。 我想要一个水平线来重新确保用户不会感到惊讶,程序没有停下来,也没有被发送到午餐在一个快乐的无限循环 – 作为一个请求留下我,我做得很好,但这可能需要一些时间。 交互式消息 – 就像文本中的进度条一样。

print('Skimming for', search_string, '\b! .001', end='')通过准备下一个screen-write来初始化消息,这将会打印三个backspaces作为rubout,然后是一个句点,擦掉“001”,延长期限。 用户inputsearch_string parrots之后, \b! 修剪我的search_string文本感叹号回来的空间print()否则强制,正确地放置标点符号。 接下来是一个空格和我正在模拟的“进度条”的第一个“点”。 不必要的是,信息也随着页码(用前导零格式化为三个长度)来引起用户的注意,即正在处理进度,并且还将反映我们稍后将build立到对。

 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.'+format(page, '03'))行中。 首先,要清除左侧的光标,将光标移到“\ b \ b \ b”的三个数字字符上,并拖放一个新的时间段以添加进度条长度。 然后,它写入到目前为止进行的页面的三位数字。 由于sys.stdout.write()等待完整缓冲区或输出通道closures, sys.stdout.flush()强制立即写入。 sys.stdout.flush()被内置在print() print(txt, end='' ) sys.stdout.flush()print() print(txt, end='' ) 。 然后,代码循环通过其普通的时间密集型操作,而它只是直接返回擦除三位数字,添加一个句点并再次写入三位数字。

三个数字擦除和重写是没有必要的 – 这只是一个例证sys.stdout.write()print()的繁荣。 你可以简单地用一个句点来填满,并且通过每次打印一个长的句点栏来忘记三个奇特的反斜杠(当然不会写格式化的页数) – 没有空格或换行符,只用sys.stdout.write('.'); sys.stdout.flush() sys.stdout.write('.'); sys.stdout.flush()对。

请注意,Raspberry Pi IDLE3 Python shell不会将“退格”视为“rubout”,而是会打印一个空格,而是创build一个明显的分数列表。

– (o = 8> wiz

这些答案中的许多似乎有点复杂。 在Python 3.X中,只需执行此操作,

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

结束的默认值是“\ n”。 我们只是简单地把它改成一个空格,或者你也可以使用end =“”。

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

这在2.7.8和2.5.2(Canopy和OSXterminal,分别)工作 – 没有模块import或时间旅行所需。

你会注意到所有上面的答案是正确的。 但是我想做一个总是写“end =”'“参数的捷径。

你可以定义一个像

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

它会接受所有的参数数量。 即使它会接受所有其他参数,如文件,刷新等,并具有相同的名称。

这是一种不插入换行符的一般打印方法。

Python 3

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

在Python 3中,实现起来非常简单

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

 BS=u'\0008' # the unicode for "delete" character for i in range(10):print(BS+"."), 

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

你好名字姓! 在打印时这是一个拳头名字,而b是姓氏,而在打印姓氏的时候最后加上了一个空格

 a="Firstname" b="Lastname" print("Hello",a,b+"!") 

我的理解是逗号压制了这个空间。这3个点是解释者的遗迹

我在范围(0,10):打印“。\ n”,…。 。 。 。 。 。 。 。 。 。