Python:读取文件:防止转义特殊字符

5

我正在读取一个包含以下内容的文件: this is the first line\n this is the second line\n\nAnother line

我试图读取这个文件并保留特殊字符\n不变。

with open(r'test.txt') as f:
    c = f.read()

但是打印c总是显示:

this is the first line\\n this is the second line\\n\\nAnother line

我尝试了没有在r'text.txt'中加前缀r,但是它仍然没有改变任何内容。

是否有可能避免对特殊字符\n进行转义?

当然,我可以使用str.replace('\\n','\n'),但我只是想知道是否能够省略这一步骤。


你的文件中是实际包含了 "\n" 还是换行符?你确定在打印它吗?打印时不应该转义字符,与 repr 相反。 - syntonym
你的问题不太清楚,是要保持文件结构吗?c = f.readlines() - roganjosh
在界面上打印输出不会显示\n。如果您尝试将其视为原始输入,则仍将弹出。为了避免这种情况,您可以采取的最佳措施是import re; re.sub('\s+', ' ',c) - BoyInDaBox89
在您发布的输出中,“\n \n”很奇怪,第一个反斜杠被转义了,而第二个没有被转义。无论如何,我刚在Windows的Python控制台中测试了您的示例(使用没有换行符或回车符的ANSI test.txt),并且“print c”没有转义任何字符。 - SkyNT
1
“'text.txt'”和“r'text.txt'”是完全相同的字符串 - 'r'前缀只影响其中转义字符的解释,而这里没有任何转义字符。无论如何,它都几乎不会影响您稍后读取的文件数据内容。 - jasonharper
我不需要打印输出。我只想将它存储在一个变量中。我已经尝试过 c = f.readlines(),但它仍然无法转义。 - ThePhi
1个回答

0

我看到两种情况:

  1. 你正在使用Python 2在Windows上以文本模式阅读它。Windows使用\r\n,因此Python 2在文本模式下期望\r\n。你应该通过添加U启用通用换行模式,open('file.txt', 'rU')。你也可以使用io.open代替open。我没有Python 2,所以我没有尝试过...

  2. 你的文件中确实有两个字符\n,而不是换行符,这种情况下一切都表现得正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接