将"\r\n "替换为"\n"

23 人关注

我有一些文本数据,正在打印出实际的字符"\r\n"(所以总共有四个字符)。 我想用单个的"\n "字符替换这四个字符,但是我似乎不能让 Python 为我做这件事。 我目前正在尝试。

mytext.replace("\r\n", "\n")

但这只是打印出"\n"(两个字符,不是一个)。 我觉得我可能错过了一些明显的东西,但如果有任何帮助,我将不胜感激。

1 个评论
如果是一个文件,你可以用 open(file_name, 'rU') 来读取它,它们都将是 '\n'
python
Jack Slingerland
Jack Slingerland
发布于 2012-08-16
7 个回答
Joran Beasley
Joran Beasley
发布于 2020-12-03
已采纳
0 人赞同

我建议使用分割线,而不是使用重排法或搜索/替换法

"\n".join(mytext.splitlines())
    
This should be the solution
如果你能解释一下为什么你推荐 splitlines 而不是regex和其他方法....,我将非常感激。
主要是为了适应未来......想象一下,两年后出现的某个操作系统使用 \r\r\n\t 作为换行符......Pythons的内置模块仍然会按照预期进行换行(假设有一个针对该操作系统的python版本)。
paul
当它位于字符串的末尾时,这将不会替换\r\n。它将只是删除。
它插入了2个 \n 而不是一个导致 splitlines() 离开和空字符串在数组的分裂。
Lanaru
Lanaru
发布于 2020-12-03
0 人赞同
mytext.replace(r"\r\n", r"\n")

r "表示一个原始字符串,它告诉python将文本中的反斜线解释为字面字符而不是转义字符。

This does nothing for me (ubuntu)
micheal-xu
micheal-xu
发布于 2020-12-03
0 人赞同

"\n".join(mytext.splitlines()) This works for me. mytext.replace(r"\r\n", r"\n") , this not work.

Austin O'Boyle
Austin O'Boyle
发布于 2020-12-03
0 人赞同

如果上述任何一种方法都不奏效,这是一个可以尝试的解决方案(对我来说,使用 Python3 的 Anaconda 发行版就是这种情况)。

mytext.replace("\\r\\n", "\\n")

这与 \被用作转义字符有关。 我以为上述使用原始字符串格式化的答案会达到同样的效果,但不知什么原因,这对我来说并不奏效,而这个却奏效了。

Gerard Yin
Gerard Yin
发布于 2020-12-03
0 人赞同

对不起,我误读了你的问题。

在这种情况下,你应该在字符串前加一个r,以使用原始字符串。

mytext.replace(r"\r\n", r"\n")
    
如果"\r\n"-是4个字符,那么删除2个字符将没有帮助/。
Luke Cheung
Luke Cheung
发布于 2020-12-03
0 人赞同

当你读文件到变量时,python会自动将"\r\n "转换为"\n",反之亦然。但是如果你用 "二进制模式 "写回文件,那么python就会准确地把你的内容写到文件中。所以在windows平台上,简单地把文件读到变量中,然后用二进制模式写回,就会把'\r\n'自动转换成'\n'。

file_name = 'test.sh'
file_content = ''
with open(file_name) as f:
    file_content = f.read()
with open(file_name, 'wb') as f:
    f.write(file_content)
    
leturn cloud
leturn cloud
发布于 2020-12-03
0 人赞同
LINEBREAK = "\n" with open(filename) as f: s = f.read()