如何打印而不使用换行符或空格

2024-11-18 08:40:00
admin
原创
9
摘要:问题描述:考虑使用printPython 的以下示例:>>> for i in range(4): print('.') . . . . >>> print('.', '.', '.', '.') . . . . 每个值之间都会添加换行符或空格。我该如何避免这种情况,以便输...

问题描述:

考虑使用printPython 的以下示例:

>>> 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 + "."),

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

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用