python 3.2.3忽略字符串中的转义序列

时间:2013-01-07 09:55:59

标签: python string python-3.x formatting escaping

我是Python的新手,我正在使用我在这里找到的一个示例来读取文件中的行并打印它们。我不明白的是解释器忽略\n转义序列的原因:

文本文件:

  

您可能会在PC中找到以下哪些组件? (选择所有正确的答案。)

     

一个。 CPU

     

B中。主板

     

℃。键盘

     

答案:A,B和E. \ n PC内的常用组件包括 \ n CPU,主板和 \ n RAM

Python代码:

questions_fname="Test.txt"

with open(questions_fname, 'r') as f:
    questions = [line.strip() for line in f]

for line in questions:
    print (line)


f.close()

我得到的结果是字符串:

Answers: A, B, and E. \nCommon components inside a PC include \nthe CPU,motherboard, and \nRAM

我只是在寻找一种格式化长线以适合屏幕的简单方法。

4 个答案:

答案 0 :(得分:4)

您在字符串中没有"\n",因为您正在从文件中读取它,所以您有"\\n"。如果你想拥有"\n",那么你需要解码字符串。请注意,3.x没有str.decode(),因此您无法使用2.x中的该机制。

3>> codecs.getdecoder('unicode-escape')('foo\\nbar')[0]
'foo\nbar'

答案 1 :(得分:0)

尝试使用以下代码获取所需行为...

questions_fname = "Test.txt"

with open(questions_fname) as f:
    for line in f:
        line = line.rstrip().replace('\\n', '\n')
        print(line)

.rstrip()删除尾随空格,包括\n的二进制形式。 .replace()会对文件内容中的\n序列进行明确的,用户定义的解释 - 捕获为可打印字符\,后跟n

使用with构造时,f.close()会自动完成。

答案 2 :(得分:0)

\只是Python脚本中的转义字符,而不是文本文件中的转义字符。在阅读文本文件时,Python会将所有反斜杠转换为\\,因此在阅读文件时,\n变为\\n,而不是换行符

答案 3 :(得分:-1)

抱歉 - 这对于Python 3.x无效(我正在看标签),但我会留下来作为参考 - 请参阅@ Ignacio的回答:https://stackoverflow.com/a/14193673/1252759

如果您有效地获得了包含文字字符raw string的{​​{1}},那么您可以重新解释字符串以使其再次成为转义序列:

'\n'

如果您想为某些显示器将线条换行到特定宽度,您可能还需要查看>>> a = r"Answers: A, B, and E. \nCommon components inside a PC include \nthe CPU,motherboard, and \nRAM" >>> print a Answers: A, B, and E. \nCommon components inside a PC include \nthe CPU,motherboard, and \nRAM >>> print a.decode('string_escape') Answers: A, B, and E. Common components inside a PC include the CPU,motherboard, and RAM 模块...