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

zyfwsgd6  于 2021-09-08  发布在  Java
关注(0)|答案(22)|浏览(375)

我想用python来做。在c语言的这个例子中,我想做什么:


# include <stdio.h>

int main() {
    int i;
    for (i=0; i<10; i++) printf(".");
    return 0;
}

输出:

..........

在python中:

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

在python中, print 将添加一个 \n 或者空间。我怎样才能避免呢?现在,这只是一个例子。不要告诉我我可以先构建一个字符串,然后再打印它。我想知道如何将字符串“附加”到 stdout .

icnyk63a

icnyk63a1#

我最近也有同样的问题。。。
我通过以下方式解决了这个问题:

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上都有效,但我还没有在MacOSX上测试过。

lsmepo6l

lsmepo6l2#

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

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

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

0sgqnhkj

0sgqnhkj3#

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

这在2.7.8和2.5.2(分别为天篷和osx终端)中都有效——无需模块导入或时间旅行。

yqlxgs2m

yqlxgs2m4#

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

dfuffjeb5#

通常有两种方法可以做到这一点:
在python 3.x中不带换行符打印
在print语句后不追加任何内容,并使用删除“\n” end='' 作为:

>>> 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='.')

在Python2.x中不使用换行符打印
添加一个尾随逗号表示在print ignore之后 \n .

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

循环中的另一个示例:

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

希望这对你有帮助。您可以访问此链接。

jum4pzuy

jum4pzuy6#

或具有如下功能:

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

现在:

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

产出:

0123456789
rkttyhzu

rkttyhzu7#

许多答案似乎有点复杂。在python 3.x中,您只需执行以下操作:

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

end的默认值为 "\n" . 我们只是把它改成一个空间,或者你也可以使用它 end="" (没有空间)做什么 printf 通常是这样。

egdjgwm8

egdjgwm88#

你会注意到以上所有答案都是正确的。但是我想做一个快捷方式,总是在末尾写入“end=''”参数。
您可以定义如下函数

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

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

lndjwyie

lndjwyie9#

您想在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

tez616oj

tez616oj10#

@勒诺满足了我的要求。我在搜索“python suppress newline”时发现了这篇文章。我正在raspberry pi上使用idle3为putty开发python 3.2。我想在putty命令行上创建一个进度条。我不想让页面滚动掉。我想用一条横线来再次向用户保证,程序没有停止运行,也没有被发送到一个快乐的无限循环中去吃午饭,这是为了恳求“别管我了,我做得很好,但这可能需要一些时间。”交互式消息——就像文本中的进度条一样。
这个 print('Skimming for', search_string, '\b! .001', end='') 通过准备下一次屏幕写入来初始化消息,下一次屏幕写入将打印三个退格,如下所示:⌫⌫⌫ 去掉一个句号,去掉“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.'+format(page, '03')) 线路。首先,要向左擦除,它会将光标备份到三个数字字符上,并将“\b\b”作为⌫⌫⌫ 删除并删除一个新句点以添加到进度条长度。然后,它会写下目前为止已经完成的页面的三位数字。因为 sys.stdout.write() 等待缓冲区满或输出通道关闭时 sys.stdout.flush() 强制立即写入。 sys.stdout.flush() 内置于 print() 这是通过 print(txt, end='' ) . 然后,代码循环执行其普通的时间密集型操作,同时不再打印任何内容,直到它返回到这里,将三位数字擦掉,添加一个句点,然后再次写入三位数字,并递增。
这三个数字的擦除和重写绝非必要——它只是一个例证 sys.stdout.write()print() . 你可以很容易地用一个句号初始化,然后忘记三个漂亮的反斜杠-b⌫ 退格(当然也不写格式化页面),每次只打印一个较长的句点栏,而不使用空格或换行符 sys.stdout.write('.'); sys.stdout.flush() 一对
请注意,raspberry pi idle3 python shell不支持退格⌫ rubout而是打印一个空格,创建一个明显的分数列表。
-(o=8>wiz

wgx48brx

wgx48brx11#

您可以在python 3中执行以下操作:


# !usr/bin/python

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

并用 python filename.pypython3 filename.py .

iyr7buue

iyr7buue12#

在Python3中,可以使用 sep=end= 系统参数 print 功能:
要不在字符串末尾添加换行符,请执行以下操作:

print('.', end='')

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

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

您可以将任何字符串传递给任一参数,并且可以同时使用这两个参数。
如果缓冲有问题,可以通过添加 flush=True 关键字参数:

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

python 2.6和2.7

从Python2.6中,您可以导入 print 使用 __future__ 模块:

from __future__ import print_function

这允许您使用上面的Python3解决方案。
但是,请注意 flush 关键字在的版本中不可用 print 从导入的函数 __future__ 在python 2中;它只适用于Python3,更具体地说是3.3和更高版本。在早期版本中,您仍然需要通过调用 sys.stdout.flush() . 您还必须重写执行此导入的文件中的所有其他打印语句。
或者你可以使用 sys.stdout.write() ```
import sys
sys.stdout.write('.')

您可能还需要打电话

sys.stdout.flush()

确保 `stdout` 立即冲洗。
rvpgvaaj

rvpgvaaj13#

您可以尝试:

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')
mlnl4t2r

mlnl4t2r14#

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 '.',

Python2中的误导-避免:

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') `
khbbv19g

khbbv19g15#

在python 3+中, print 是一个函数。当你打电话的时候

print('hello world')

python将其转换为

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

你可以改变 end 你想要什么就给什么。

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

相关问题