Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法阻止input()转义\n?_Python_Python 3.x_Input_Newline - Fatal编程技术网

Python 有没有办法阻止input()转义\n?

Python 有没有办法阻止input()转义\n?,python,python-3.x,input,newline,Python,Python 3.x,Input,Newline,因此,我尝试允许我的用户在字符串中输入\n以指定新行。 然而,由于某些原因,它被翻译成“\\n”。所以我可以做到: inp = input().replace("\\n", "\n") 但这似乎有点麻烦;有更好的方法吗?你在这里寻找的实际上与你的要求几乎相反 输入不会以任何方式转义字符串;它完全返回用户键入的字符串 事实上,您尝试的解决方案虽然可能不是最好的解决方案,但很好 我认为您的困惑在于,您将源代码中的字符串文字概念与实际字符串值混淆了: 我的印象是,字符串中的\n会导致打印该字符串时

因此,我尝试允许我的用户在字符串中输入\n以指定新行。 然而,由于某些原因,它被翻译成“\\n”。所以我可以做到:

inp = input().replace("\\n", "\n")

但这似乎有点麻烦;有更好的方法吗?

你在这里寻找的实际上与你的要求几乎相反

输入
不会以任何方式转义字符串;它完全返回用户键入的字符串

事实上,您尝试的解决方案虽然可能不是最好的解决方案,但很好


我认为您的困惑在于,您将源代码中的字符串文字概念与实际字符串值混淆了:

我的印象是,字符串中的\n会导致打印该字符串时触发新行,例如“exam\nple”中的\n只是一个字符串而不是其他内容

否,
\n
在打印字符串时不会触发新行;只有换行符才能做到这一点

但是,源代码中的字符串文本中的
\n
不会在字符串中提供
\n
,而是在字符串中提供换行符

当你写这篇文章时:

>>> spam = "exam\nple"
…Python将
\n
视为转义序列,并为您提供包含换行符的字符串值。因此:

>>> print(spam)
exam
ple
字符串中没有反斜杠和
n
,而是有一个换行符。如果您的字符串中有反斜杠和
n
,它将打印该字符串。例如:

>>> spam = r"exam\nple"
>>> print(spam)
exam\nple
>>> spam = "exam" + chr(92) + "nple"
>>> print(spam)
exam\nple
这正是这里所发生的:
input
再次提供了用户输入的字符,包括反斜杠和
n

通过查看字符串的
repr
,您可能会更加困惑,因为
repr
不仅仅显示字符串,它还显示了一个字符串文本,您可以将其输入Python以获取字符串:

>>> spam = "exam\nple"
>>> print(spam)
exam
ple
>>> spam
'exam\nple'
因此,这就解释了为什么这是可行的:

inp = input().replace("\\n", "\n")
不是用户的字符串中有
\\n
,而是源代码中的字符串文字
“\\n”
是反斜杠和n,与用户输入的内容匹配,而源代码中的字符串文字
“\n”
是换行符,您希望用它替换反斜杠和n


您需要的是允许用户手动转义他们的输入,就像您在源代码中对文本字符串所做的那样,然后让您的代码应用这些转义序列,就像Python将源代码中的字符串文本转换为字符串值一样

您可以通过手动处理转义序列来实现这一点,如您的代码:

inp = input().replace("\\n", "\n")
但是如果你想处理其他的逃跑,那就太难看了。最简单的方法是应用
unicode转义
编解码器,如下所示:

inp = codecs.decode(input(), "unicode-escape")
现在,如果用户键入
abc\ndef
,则将取消转换为
abc
、换行符和
def

无论哪种方式,如果您想多次这样做,您都可以编写一个包装函数:

def unescaped_input(prompt=""):
    return codecs.decode(input(prompt), "unicode-escape")
……现在:

inp = unescaped_input()

输入
未转义
\n
。字符串的内容与其表示形式之间存在差异。如果您写的是
\n
,那么您写的是反斜杠和
n
,而不是新行。Input不会解释该行(就像Python解释器那样)
Input()。replace(r'\n','\n')
@WillemVanOnsem我的印象是,字符串中的\n导致在打印该字符串时触发新行,例如“exam\n”中的\n只是一根线,其他什么都没有。我想你在这里寻找的与你要求的正好相反。您希望接受用户显式转义的字符串,并取消对它们的转义,对吗?@Chaoscrasher,
len('foo\nbar')
是7,而不是8,因为
\n
正是Python写出单个(换行)字符的方式;这不是一个反斜杠,后面跟着一个
n
(如果是这样的话,它将被写成
'foo\\nbar'
,反斜杠加倍表示它是字面意思)。谢谢你真的向我解释了这一点,并且说得很清楚,而不是只是开怀大笑,我真的很感谢你花时间:D;我不知道\n实际上是->escapedwas