阻止python打印newlin

2024-05-20 03:48:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python编写了这段代码

inputted = input("Enter in something: ")
print("Input is {0}, including the return".format(inputted))

输出

Enter in something: something
Input is something
, including the return

我不确定发生了什么;如果我使用不依赖于用户输入的变量,那么在用变量格式化之后,就不会得到换行符。我怀疑当我点击return时,Python可能会把换行作为输入。

如何使输入不包含任何换行符,以便与其他字符串/字符进行比较?(例如something == 'a'


Tags: the字符串代码用户informatinputreturn
0条回答
网友
1楼 · 发布于 2024-05-20 03:48:27

您是正确的-新行包含在inputted中。要删除它,只需调用strip("\r\n")从结尾删除换行符:

print("Input is {0}, including the return".format(inputted.strip("\r\n")))

如果inputted的结尾没有换行符,但将删除其中的任何换行符,则这不会导致任何问题,因此无论inputted是否为用户输入,都可以使用它。

如果根本不希望文本中有任何新行,可以使用inputted.replace("\r\n", "")删除所有新行。

网友
2楼 · 发布于 2024-05-20 03:48:27

你的问题实际上是日食。假设你使用PyDev,我就可以重现这个问题。在Eclipse控制台中输入某些内容时,会出现问题中描述的问题。但是,当使用Python 3.1.1解释器直接执行同一脚本时,inputted不包含换行符。

我调查了Python源代码,发现如果stdin是交互式的(即TTY或prompt,但是您想调用它),那么input()使用GNU readline,但如果需要,可以返回到stdin对象的.readline()方法。然后,如果readline的结果以\n结尾,则删除该字符。注意:这里没有CR-LF或LF-CR处理(在后备情况下)!

所以我写了这个小剧本来看看到底发生了什么:

import sys
from io import StringIO

for stdin in [sys.stdin, StringIO("test\r\ntest\r\n")]:
    sys.stdin = stdin 

    print("readline returns this: " + repr(sys.stdin.readline()))

    inputted = input("Enter in something: ")
    print("inputted: " + repr(inputted))

    print("inputted is printed like this: --> {0} <--".format(inputted))

它首先使用标准stdin(控制台或Eclipse控制台)执行代码,然后使用包含文本test\r\ntest\r\n的准备好的stdin执行代码。

尝试在Eclipse中运行脚本-必须输入两次字符串。结论是:在Eclipse控制台中按Enter将生成CR-LF(“\r\n”)。在Eclipse控制台中打印“\r”将跳转到下一行。

另一方面,在Windows控制台中运行它将产生预期的输出:input()返回一个字符串,结尾没有换行符,因为(我猜)使用了GNU readline。使用准备好的stdin StringIO("test\r\n"),结果是Eclipse中的“test\r”(尽管没有打印为换行符)。

希望这一切都有意义。。。但我仍然不知道这是否是Eclipse的预期行为。

网友
3楼 · 发布于 2024-05-20 03:48:27

如果只想删除最后一行的结尾,可以使用rstrip。
inputted.rstrip ("\r\n")

相关问题 更多 >