如何打印而不使用换行符或空格
- 2024-11-18 08:40:00
- admin 原创
- 9
问题描述:
考虑使用print
Python 的以下示例:
>>> for i in range(4): print('.')
.
.
.
.
>>> print('.', '.', '.', '.')
. . . .
每个值之间都会添加换行符或空格。我该如何避免这种情况,以便输出结果....
为?换句话说,我如何将字符串“附加”到标准输出流?
解决方案 1:
在Python 3中,可以使用函数的sep=
和参数:end=
`print`
不在字符串末尾添加换行符:
print('.', end='')
为了不在要打印的所有函数参数之间添加空格:
print('a', 'b', 'c', sep='')
您可以将任何字符串传递给任一参数,并且可以同时使用两个参数。
flush=True
如果您在缓冲方面遇到问题,您可以通过添加关键字参数来刷新输出:
print('.', end='', flush=True)
Python 2.6 和 2.7
从 Python 2.6 开始,你可以使用模块print
从 Python 3 导入该函数:__future__
from __future__ import print_function
这允许您使用上面的 Python 3 解决方案。
但是,请注意,关键字在 Python 2 中导入的函数flush
版本中不可用;它只在 Python 3 中有效,更具体地说是 3.3 及更高版本。在早期版本中,您仍需要通过调用 手动刷新。您还必须在执行此导入的文件中重写所有其他打印语句。print
`__future__`sys.stdout.flush()
或者你可以使用sys.stdout.write()
import sys
sys.stdout.write('.')
您可能还需要致电
sys.stdout.flush()
以确保stdout
立即冲洗。
解决方案 2:
对于 Python 2 及更早版本,它应该像Guido van Rossum在Re: 如何在没有 CR 的情况下进行打印?中描述的那样简单(解释):
是否可以打印某些内容,但不自动在其后附加回车符?
是的,在最后一个参数后添加一个逗号来打印。例如,此循环在以空格分隔的行上打印数字 0..9。请注意添加最后换行符的无参数“print”:
>>> for i in range(10):
... print i,
... else:
... print
...
0 1 2 3 4 5 6 7 8 9
>>>
解决方案 3:
注意:这个问题的标题曾经是“如何在 Python 中 printf”
由于人们可能会根据标题来这里寻找它,因此 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
..........
解决方案 4:
对于 Python 2.6+,请使用 Python 3 风格的打印函数(它还会破坏同一文件中任何现有的关键字打印语句)。
# For Python 2 to use the print() function, removing the print keyword
from __future__ import print_function
for 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 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
解决方案 5:
如何在同一行打印:
import sys
for i in xrange(0,10):
sys.stdout.write(".")
sys.stdout.flush()
解决方案 6:
Python 3.x 中的函数print
有一个可选end
参数,可以让您修改结束字符:
print("HELLO", end="")
print("HELLO")
输出:
你好你好
还有sep
分隔符:
print("HELLO", "HELLO", "HELLO", sep="")
输出:
你好你好你好
如果您想在 Python 2.x 中使用它,只需在文件开头添加它:
from __future__ import print_function
解决方案 7:
使用functools.partial创建一个名为printf的新函数:
>>> import functools
>>> printf = functools.partial(print, end="")
>>> printf("Hello world
")
Hello world
这是用默认参数包装函数的简单方法。
解决方案 8:
在 Python 3+ 中,print
是一个函数。当你调用
print('Hello, World!')
Python 将其翻译为
print('Hello, World!', end='
')
你可以改变end
成任何你想要的。
print('Hello, World!', end='')
print('Hello, World!', end=' ')
解决方案 9:
在 Python 2.x 中,您只需,
在函数末尾添加print
,这样它就不会在新行上打印。
解决方案 10:
Python 3:
print('.', end='')
Python 2.6+:
from __future__ import print_function # needs to be first statement in file
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') `
解决方案 11:
只需使用end=''
for i in range(5):
print('a',end='')
# aaaaa
解决方案 12:
一般来说,有两种方法可以做到这一点:
在 Python 3.x 中打印时不带换行符
在打印语句之后不附加任何内容,并使用删除'\n' end=''
,如下所示:
>>> print('hello')
hello # Appending '
' automatically
>>> print('world')
world # With previous '
' world comes down
# The solution is:
>>> print('hello', end='');print(' world'); # End with anything like end='-' or end=" ", but not '
'
hello world # It seems to be the correct output
循环中的另一个示例:
for i in range(1,10):
print(i, end='.')
在 Python 2.x 中打印时不带换行符
添加尾随逗号表示:打印后,忽略`
`。
>>> print "hello",; print" world"
hello world
循环中的另一个示例:
for i in range(1,10):
print "{} .".format(i),
您可以访问此链接。
解决方案 13:
您可以尝试:
import sys
import time
# Keeps the initial message in buffer.
sys.stdout.write("
foobar bar black sheep")
sys.stdout.flush()
# Wait 2 seconds
time.sleep(2)
# Replace the message with a new one.
sys.stdout.write("
"+'hahahahaaa ')
sys.stdout.flush()
# Finalize the new message by printing a return carriage.
sys.stdout.write('
')
解决方案 14:
只需使用end
“=”或sep
“=”
>>> for i in range(10):
print('.', end = "")
输出:
.........
解决方案 15:
我最近遇到了同样的问题......
我通过以下方式解决了它:
import sys, os
# Reopen standard output with "newline=None".
# in this mode,
# Input: accepts any newline character, outputs as '
'
# Output: '
' 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 上测试过。
解决方案 16:
许多答案看起来有点复杂。在 Python 3.x 中,你只需执行以下操作:
print(<expr>, <expr>, ..., <expr>, end=" ")
end 的默认值是`"
"。我们只是将其更改为空格,或者您也可以使用
end=""(无空格) 来执行
printf`通常的操作。
解决方案 17:
您可以在 Python 3 中执行相同操作,如下所示:
#!usr/bin/python
i = 0
while i<10 :
print('.', end='')
i = i+1
python filename.py
并使用或执行它python3 filename.py
。
解决方案 18:
lenooh 满足了我的查询。我在搜索“python suppress newline”时发现了这篇文章。我正在 Raspberry Pi 上使用IDLE 3为PuTTY开发 Python 3.2 。
我想在 PuTTY 命令行上创建一个进度条。我不想让页面滚动。我想要一条水平线来让用户放心,程序没有停止运行,也没有进入无限循环,不会惊慌失措——就像一个恳求“别烦我,我很好,但这可能需要一些时间。”的互动消息——就像文本中的进度条。
通过准备下一次屏幕写入来初始化print('Skimming for', search_string, '! .001', end='')
消息,这将打印三个退格键作为 ⌫⌫⌫ 擦除,然后打印一个句号,擦掉“001”并延长句号行。
search_string
在模仿用户输入后,会修剪文本!
中的感叹号search_string
,使其回到空格上方,print()
否则会强制正确放置标点符号。后面跟着一个空格和我正在模拟的“进度条”的第一个“点”。
不必要的是,消息还会加上页码(格式化为长度为 3 且带有前导零),以便通知用户进度正在处理,并且还将反映我们稍后将在右侧构建的句点数量。
import sys
page=1
search_string=input('Search for?',)
print('Skimming for', search_string, '! .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('.'+format(page, '03')) #<-- here's the progress bar meat
sys.stdout.flush()
if done: #( flag alternative to break, exit or quit)
print('
Sorting', 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('.'+format(page, '03'))
行。首先,要擦除左侧的内容,它会将光标后退到三个数字字符上,其中 '\b\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 IDLE 3 Python shell 不将退格键视为 ⌫ rubout,而是打印一个空格,从而创建一个明显的分数列表。
解决方案 19:
您想在for循环中打印一些内容;但您不希望每次都在新行中打印......
例如:
for i in range (0,5):
print "hi"
OUTPUT:
hi
hi
hi
hi
hi
但是你希望它像这样打印:嗨嗨嗨嗨嗨对吧???
只需在打印“hi”后添加逗号即可。
例子:
for i in range (0,5):
print "hi",
输出:
hi hi hi hi hi
解决方案 20:
您会注意到,以上所有答案都是正确的。但我想创建一个快捷方式,始终在最后写入“ end='' ”参数。
你可以定义一个函数
def Print(*args, sep='', end='', file=None, flush=False):
print(*args, sep=sep, end=end, file=file, flush=flush)
它会接受所有数量的参数。它甚至会接受所有其他参数,如 file、flush 等,并且具有相同的名称。
解决方案 21:
要打印而不结束行,您可以执行以下操作:
print("Hello", end='')
因此如果你添加
print(" Hello again!", end='')
输出将如下所示:
Hello Hello again!
解决方案 22:
添加end=''
打印功能例如:
print(i+1, end='')
解决方案 23:
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:
以下有三个代码供您选择:
print("".join(["." for i in range(4)]))
或者
print("." + "." + "." + ".")
或者
print(".", ".", ".", ".", sep="")
解决方案 25:
或者有如下函数:
def Print(s):
return sys.stdout.write(str(s))
那么现在:
for i in range(10): # Or `xrange` for the Python 2 version
Print(i)
输出:
0123456789
解决方案 26:
Python3:
print('Hello',end='')
例子 :
print('Hello',end=' ')
print('world')
输出:Hello world
此方法在提供的文本之间添加分隔符:
print('Hello','world',sep=',')
输出:Hello,world
解决方案 27:
注意,
不是连接运算符。
不要进行print
连接,而是在打印之前进行连接。例如'.'*4
或'.' + '.' + '.'
end=
与相比,它有优点也有缺点sep=
。优点是它可以在任何地方使用,而不仅仅是在print
。
解决方案 28:
for i in xrange(0,10): print '.',
这在 2.7.8 和 2.5.2 中均有效(分别是Enthought Canopy和 OS X 终端)——无需导入模块或进行时间旅行。
解决方案 29:
最简单的选择是使用如下方法:
st = {4,5,'c','a',2,'b'}
print(*list(st)," ")
解决方案 30:
您不需要导入任何库。只需使用删除字符:
BS = u' 8' # The Unicode point for the "delete" character
for i in range(10):print(BS + "."),
这将删除换行符和空格 (^_^)*。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件