在Python 2.7中读写文件中的转义字符

2 投票
3 回答
4089 浏览
提问于 2025-05-10 09:57

我有一个 .txt 文件,里面有很多行数据,这些数据是用 | 符号分开的。举个例子,这一行的内容 - 你可以看到它已经包含了转义序列。这些转义序列是因为我不知道怎么在类似 .csv 的系统中保留段落和缩进。假设我只能用这个方法。

Example.|This is an example.\n\nLook at this paragraph.|Great.

并不在把这些行变成类实例的属性时遇到问题 - 我可以毫无问题地读取和处理用 | 分开的元素。

当我让 Python 读取并打印那一行的第二个元素时,我得到了这个结果。

'This is an example.\n\nLook at this paragraph.'

这里的 \n\n 依然存在 - 反思一下,这其实也不算意外。

我不知道我的说法是否准确,但我觉得我基本上是在尝试让 Python 把这个当作字符串字面量来处理,而不是原始字符串字面量。我还得补充一下,我对编码的知识几乎为零。

总之,如果能写出像 r'this\nparagraph' 这样的内容到文件中,或者直接在文件里输入 this\nparagraph,然后看到 this\nparagraph 这样的内容,但又能让 Python 打印成

this
paragraph

那样就太好了。我该怎么做呢?

补充:对前几位回答者表示歉意,我觉得我应该重写我的问题,让它更清晰。

相关文章:

  • 暂无相关问题
暂无标签

3 个回答

-1

你需要以二进制模式打开文件,也就是用“wb”而不是“w”。如果不这样做,文件中的换行符会自动转换成你操作系统特定的格式。

https://docs.python.org/2/library/functions.html#open

-1

在Python中,迭代是针对集合而不是字符串进行的。

你可以用下面的方式来分割文件:

with open('quick.txt', 'r') as f:
    F = f.split("\n")
    for line in F:
        print line

或者用来写入:

with open('quick.txt', 'w') as f:
    text = "" + (q + "\n" for q in "hello\nworld".split("\n"))
    f.write(text)

我个人喜欢在写入文件之前先处理好所有的字符串,并且对于一些更动态的内容,使用Python本身的数据类型,而不是直接写入磁盘。

编辑## 迭代确实可以在字符串上进行,但不适合你想要的那种情况。 ##编辑

1

如果你在使用 print string 时看到 'This is an example.\n\nLook at this paragraph.',那么这说明这个字符串可能长这样:

'This is an example.\\n\\nLook at this paragraph.'

这里的 \\ 是反斜杠自己的转义字符,它让Python把它当作普通的反斜杠来处理,而不是把 \n 识别为换行符。

解决换行问题最简单的方法是使用 replace。理想情况下,你应该在读取字符串时就这样做,不过我会给你展示用打印的方式是怎样的:

>>> print 'This is an example.\\n\\nLook at this paragraph.'.replace('\\n', '\n')
This is an example.

Look at this paragraph.

这个操作会把转义的 \\n 替换成真正的换行符 \n

撰写回答