如何打印没有换行或空间?
问题在于标题。
我想在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导入print
function:
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的)打印函数有一个可选的结束参数,让你修改结束字符。 还有分隔符。
您可以在print
function的最后添加,
这样就不会在新行上打印。
使用functools.partial来创build一个名为printf的新函数
>>> import functools >>> printf = functools.partial(print, end="") >>> printf("Hello world\n") Hello world
简单的方法来包装一个函数与默认参数。
在Python中的print
function自动生成一个新的行。 你可以尝试:
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.py
或python3 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”,…。 。 。 。 。 。 。 。 。 。