在Python 2.7中替换字符串中的'\n'

3 python string replace newline

这是我的file.txt:

Egg and Bacon;
Egg, sausage and Bacon
Egg and Spam;
Spam Egg Sausage and Spam;
Egg, Bacon and Spam;
Run Code Online (Sandbox Code Playgroud)

我想将newLine'\n'转换为'$'.我刚用过:

f = open(fileName)
text = f.read()      
text = text.replace('\n',' $ ')
print(text)
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

$ Spam Egg Sausage and Spam;
Run Code Online (Sandbox Code Playgroud)

我的输出必须像:

Egg and Bacon; $ Egg, sausage and Bacon $ Egg ...
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我正在使用#-*- encoding: utf-8 -*-

谢谢.

enr*_*cis 7

您的换行符可能表示为\r\n.为了替换它们,你应该这样做:

text.replace('\r\n', ' $ ')
Run Code Online (Sandbox Code Playgroud)

对于适用于类UNIX系统(使用\n)和Windows(使用\r\n)的可移植解决方案,可以使用正则表达式替换文本:

>>> import re
>>> re.sub('\r?\n', ' $ ', 'a\r\nb\r\nc')
'a $ b $ c'
>>> re.sub('\r?\n', ' $ ', 'a\nb\nc')
'a $ b $ c'
Run Code Online (Sandbox Code Playgroud)

  • 附加评论:我建议先执行 `text = text.replace('\r\n','\n')` 然后执行 `text = text.replace('\n', ' $ ')`。这适用于所有文件,对于具有“\n”行分隔符的文件和具有“\r\n”行分隔符的文件。 (2认同)

Pad*_*ham 6

您可以使用分割线。

lines = """Egg and Bacon;
Egg, sausage and Bacon
Egg and Spam;
Spam Egg Sausage and Spam;
Egg, Bacon and Spam;"""

print(" $ ".join(lines.splitlines()))
Egg and Bacon; $ Egg, sausage and Bacon $ Egg and Spam; $ Spam Egg Sausage and Spam; $ Egg, Bacon and Spam;
Run Code Online (Sandbox Code Playgroud)

或者简单地使用 rstrip 并连接文件对象,而不将所有内容读入内存:

with open("in.txt") as f: 
    print(" $ ".join(line.rstrip() for line in f))
    Egg and Bacon; $ Egg, sausage and Bacon $ Egg and Spam; $ Spam Egg Sausage and Spam; $ Egg, Bacon and Spam;
Run Code Online (Sandbox Code Playgroud)

这是比将所有文件读入内存并使用正则表达式更有效的解决方案。您还应该始终使用with打开文件,因为它会自动关闭它们。

rstrip 将删除\n \r\n等..

In [41]: s = "foo\r\n"
In [42]: s.rstrip()
Out[42]: 'foo'    
In [43]: s = "foo\n"    
In [44]: s.rstrip()
Out[44]: 'foo'
Run Code Online (Sandbox Code Playgroud)


小智 6

text = text.replace('\\n', '')
Run Code Online (Sandbox Code Playgroud)