Xtr*_*eme 8 python string newline python-3.x
我有一小段代码用于我的操作系统:
print("Type your document below.")
print("Press enter to save.")
print("Type \\n for a new line.")
file=input()
print("Enter a file name...")
filename=input()
outFile = open(filename, "w+")
outFile.write(file)
outFile.close()
Run Code Online (Sandbox Code Playgroud)
但是当我运行这段代码(在def中)时,请说我输入如下内容:
foo \n bar
Run Code Online (Sandbox Code Playgroud)
因为当收到用户的输入时输入不起作用,所以你必须使用\n.
该文件结果如下:
foo \n bar
Run Code Online (Sandbox Code Playgroud)
代替:
foo
bar
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 10
\n
是一个仅在字符串文字中起作用的转义序列.input()
不接受字符串文字,它接受用户输入的文本而不对其进行任何处理,因此任何进入\
后面的人都会n
产生一个由两个字符组成的字符串,一个反斜杠和一个字母n
,而不是换行符.
你必须自己处理这些逃脱:
file = file.replace(r'\n', '\n')
Run Code Online (Sandbox Code Playgroud)
在这里,我使用了原始字符串文字,它也不支持转义序列,以定义\
后跟a 的文字反斜杠n
.
或者,反复询问用户新的文件名,直到完成:
lines = []
print('Type in your document, followed by a blank line:')
while True:
line = input("> ")
if not line:
break
lines.append(line)
file = '\n'.join(lines)
Run Code Online (Sandbox Code Playgroud)
演示:
>>> lines = []
>>> print('Type in your document, followed by a blank line:')
Type in your document, followed by a blank line:
>>> while True:
... line = input("> ")
... if not line:
... break
... lines.append(line)
...
> foo
> bar
>
>>> lines
['foo', 'bar']
>>> '\n'.join(lines)
'foo\nbar'
Run Code Online (Sandbox Code Playgroud)
请注意,如果您想支持 Python 风格的字符串(不仅支持\\n
, \\t
,\\r
等\\u1234
),您应该codecs.decode
与unicode_escape
处理程序一起使用:
contents = input()\ncontents = codecs.decode(contents, "unicode_escape")\n
Run Code Online (Sandbox Code Playgroud)\n\n请注意,这将会改变
\n\nfoo\\nbar\\\\nbash\\u1234\n
Run Code Online (Sandbox Code Playgroud)\n\n到
\n\nfoo\nbar\\nbash\xe1\x88\xb4\n
Run Code Online (Sandbox Code Playgroud)\n\n您还需要处理错误。您可以通过捕获UnicodeDecodeError
或使用错误替换策略来做到这一点:
contents = input()\ncontents = codecs.decode(contents, "unicode_escape", errors="replace")\n
Run Code Online (Sandbox Code Playgroud)\n\n遗憾的是,这似乎与 unicode 字符混淆:
\n\ncodecs.decode("\xce\xb1", "unicode_escape")\n#>>> \'\xc3\x8e\xc2\xb1\'\n
Run Code Online (Sandbox Code Playgroud)\n\n我知道的最简单的修复方法是首先使用以下命令转义raw_unicode_escape
:
contents = input()\ncontents = contents.encode("raw_unicode_escape")\ncontents = contents.decode("unicode_escape")\n
Run Code Online (Sandbox Code Playgroud)\n\n这可能比您需要的要复杂得多,所以我建议实际上不要这样做。
\n正如Martijn解释的那样,您需要自己处理替换。实际上,最简单的方法是使用.replace
方法:
>>> print(input('Enter \\n for newline: ').replace('\\n', '\n'))
Enter \n for newline: This is my \nnewline
This is my
newline
Run Code Online (Sandbox Code Playgroud)
这对于\n
转义序列会很好用,但是如果您想要其他人(例如\t
),则需要自己实现。
归档时间: |
|
查看次数: |
12284 次 |
最近记录: |