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

时间:2009-01-29 20:58:26

标签: python newline

问题在于标题。

我想在中这样做。我想在中的这个例子中做些什么:

#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或空格,我该如何避免?现在,这只是一个例子。不要告诉我,我可以先构建一个字符串然后打印它。我想知道如何将{追加'字符串添加到stdout

26 个答案:

答案 0 :(得分:2253)

一般方式

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

您可能还需要致电

sys.stdout.flush()

确保立即刷新stdout

Python 2.6 +

从Python 2.6中,您可以从Python 3中导入print函数:

from __future__ import print_function

这允许您使用下面的Python 3解决方案。

Python 3

在Python 3中,print语句已更改为函数。在Python 3中,您可以改为:

print('.', end='')

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

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

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

但请注意,{2}中从flush导入的print函数版本中没有__future__关键字。它只适用于Python 3,更具体地说是3.3及更高版本。在早期版本中,您仍需要通过调用sys.stdout.flush()手动刷新。

来源

  1. https://docs.python.org/2/library/functions.html#print
  2. https://docs.python.org/2/library/__future__.html
  3. https://docs.python.org/3/library/functions.html#print

答案 1 :(得分:289)

它应该像Guido Van Rossum在此链接中所描述的那样简单:

Re:没有c / r打印怎么样?

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

  

是否可以打印一些东西但不能自动打印   回车附加到它?

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

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

答案 2 :(得分:164)

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

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

>>> 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

并且,您可以轻松地乘以字符串值:

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

答案 3 :(得分:90)

对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打印关键字,请创建单独的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

答案 4 :(得分:38)

这不是标题中问题的答案,但它是如何在同一行上打印的答案:

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

答案 5 :(得分:26)

新的(从Python 3.0开始)print函数有一个可选的end参数,可以让你修改结束字符。分隔符也有sep

答案 6 :(得分:18)

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

>>> import functools

>>> printf = functools.partial(print, end="")

>>> printf("Hello world\n")
Hello world

使用默认参数包装函数的简便方法。

答案 7 :(得分:17)

您只需在,功能的末尾添加print即可在新行上打印。

答案 8 :(得分:15)

python中的

print函数会自动生成一个新行。你可以尝试:

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

答案 9 :(得分:14)

您可以使用end print参数进行此操作。在Python3中,range()返回迭代器,xrange()不存在。

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

答案 10 :(得分:11)

Python 3.6.1代码

import requests

url = 'https://graphs.coinmarketcap.com/v1/datapoints/bitcoin/'
json = requests.get(url).json()
df = pd.DataFrame({col: dict(vals) for col, vals in json.items()})

print(df.head())

                market_cap_by_available_supply  price_btc   price_usd   volume_usd
1367174841000   1500517590                      1.0         135.30     0.0
1367261101000   1575032004                      1.0         141.96     0.0
1367347502000   1501657492                      1.0         135.30     0.0
1367433902000   1298951550                      1.0         117.00     0.0
1367522401000   1148667722                      1.0         103.43     0.0

<强>输出

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

答案 11 :(得分:8)

在Python 3中,打印是一种功能。当你打电话

print ('hello world')

Python将其翻译为

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

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

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

答案 12 :(得分:6)

python 2.6 +

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

python 3

print('.', end='')

python&lt; = 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') `

答案 13 :(得分:6)

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

我解决了这个问题:

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上......

HTH

答案 14 :(得分:5)

您会注意到以上所有答案都是正确的。但是我想做一个快捷方式来总是写'&#34;端=&#39;&#39; &#34;参数到底。

您可以定义类似

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

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

答案 15 :(得分:5)

你可以在python3中做同样的事情:

#!usr/bin/python

i = 0
while i<10 :
    print('.',end='')
    i = i+1

并使用python filename.pypython3 filename.py

执行

答案 16 :(得分:4)

@lenooh满足了我的疑问。我在搜索&#39; python压制换行符时发现了这篇文章。我在Raspberry Pi上使用IDLE3为PuTTY开发Python 3.2。我想在PuTTY命令行上创建一个进度条。我不想让页面滚动。我想要一条水平线来重新确保用户不要害怕程序没有停止,也不会在快乐的无限循环中被送到午餐 - 作为请求让我离开,我和#39;我做得很好,但这可能需要一些时间。&#39;交互式消息 - 就像文本中的进度条一样。

print('Skimming for', search_string, '\b! .001', end='')通过准备下一个屏幕写入来初始化消息,这将打印三个退格区域作为⌫⌫⌫rubout然后一个句点,擦除&#39; 001&#39;并延长期限。在search_string鹦鹉用户输入后,\b!修剪我的search_string文字的感叹号,以覆盖print()强制放置标点符号的空格。接下来是一个空格和第一个点'&#39;的进度条&#39;我正在模仿。不必要的是,该消息也随后用页码编号(格式化为带有前导零的三个长度)以从用户处注意到正在处理进度并且还将反映我们稍后将构建到的时段的计数。右。

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'))行。首先,要向左擦除,它会使用&#39; \ b \ b \ b&#39;将光标备份在三个数字字符上。 as⌫⌫⌫擦除并删除一个新的句点以添加到进度条长度。然后它写入目前已进展的页面的三个数字。由于sys.stdout.write()等待完整缓冲区或输出通道关闭,sys.stdout.flush()强制立即写入。 sys.stdout.flush()内置print()print(txt, end='' )sys.stdout.write()绕过。print()。然后代码循环通过其平凡的时间密集型操作,而它不再打印,直到它返回此处擦除三位数字,添加一个句点并再次写入三位数,递增。

擦除和重写的三个数字绝不是必要的 - 它只是一个繁荣,例如sys.stdout.write('.'); sys.stdout.flush()与{{1}}。您可以轻松地使用句点进行填充并忘记三个花哨的反斜杠-b⌫退格(当然也不会编写格式化的页面计数),只需每次打印一个较长的时间段 - 没有空格或换行符仅使用{{1}}对。

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

- (o = 8&gt; wiz

答案 17 :(得分:4)

你想要在for循环中打印一些内容;但是你不希望每次都在新行中打印.. 例如:

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

 OUTPUT:
    hi
    hi
    hi
    hi
    hi

但你希望它像这样打印: 嗨嗨嗨嗨嗨右? 只需在打印后添加一个逗号&#34;嗨&#34;

示例:

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

答案 18 :(得分:4)

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

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

结束的默认值是&#34; \ n&#34;。我们只是将其更改为空格,或者您也可以使用end =&#34;&#34;。

答案 19 :(得分:4)

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

这对你有用。这里逗号(,)在打印后很重要。 得到了帮助:http://freecodeszone.blogspot.in/2016/11/how-to-print-in-python-without-newline.html

答案 20 :(得分:2)

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

这适用于2.7.8&amp; 2.5.2(分别为Canopy和OSX终端) - 无需模块导入或时间旅行。

答案 21 :(得分:2)

或者具有以下功能:

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

那么现在:

for i in range(10): # or `xrange` for python 2 version
   Print(i)

输出:

0123456789

答案 22 :(得分:1)

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

Python 3

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

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

答案 23 :(得分:1)

 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)

答案 24 :(得分:-1)

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

在Python 3.x中不使用换行符打印

在print语句后不添加任何内容,并使用end=''删除'\ n':

>>> print('hello')
hello  # appending '\n' automatically
>>> print('world')
world # with previous '\n' world comes down

# solution is:
>>> print('hello', end='');print(' world'); # end with anything like end='-' or end=" " but not '\n'
hello world # it seem correct output

循环中的另一个示例

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

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

添加结尾逗号表示打印后忽略\n

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

循环中的另一个示例

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

希望这会对您有所帮助。 您可以访问此link

答案 25 :(得分:-2)

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

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

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