防止python打印换行符

时间:2010-03-20 19:33:46

标签: python input newline user-input

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

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

我怎样才能使输入不包含任何换行符,以便我可以将它与其他字符串/字符进行比较? (例如something == 'a'

4 个答案:

答案 0 :(得分:7)

你是对的 - inputted中包含换行符。要删除它,您只需拨打strip("\r\n")即可从最后删除换行符:

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

如果inputted最后没有换行符,则不会导致任何问题,但会删除任何换行符,因此无论inputted是否为用户输入,您都可以使用此换行符。

如果您根本不想在文本中添加任何换行符,则可以使用inputted.replace("\r\n", "")删除所有换行符。

答案 1 :(得分:4)

您的问题实际上是Eclipse。假设您使用PyDev,我能够重现问题。在Eclipse控制台中输入内容时,会出现问题中描述的问题。但是当使用Python 3.1.1解释器直接执行相同的脚本时,inputted不包含换行符。

我调查了Python源代码并发现input()使用 GNU readline 如果stdin是交互式的(即TTY或提示符,但是你想要调用它),但是又回到了必要时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 \ n”将跳转到下一行。

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

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

答案 2 :(得分:3)

如果您只想剥离最后一行结尾,可以使用rstrip inputted.rstrip ("\r\n")

答案 3 :(得分:2)

inputted = inputted.strip()

编辑如上所述,这将在开始和结束时终止所有空白。一种摆脱只有尾随换行符的方法是:

import re
inputted = re.sub("[\n\r]+$", "", inputted)