如何去除末尾的换行符?
如果字符串的最后一个字符是换行符,我该如何去掉它呢?
"abc\n" --> "abc"
28 个回答
171
去掉行尾字符的标准方法是使用字符串的 rstrip() 方法,这个方法可以去掉字符串末尾的 \r 或 \n。下面是关于 Mac、Windows 和 Unix 行尾字符的例子。
>>> 'Mac EOL\r'.rstrip('\r\n')
'Mac EOL'
>>> 'Windows EOL\r\n'.rstrip('\r\n')
'Windows EOL'
>>> 'Unix EOL\n'.rstrip('\r\n')
'Unix EOL'
把 '\r\n' 作为 rstrip 的参数,意味着它会去掉末尾的任何 '\r' 或 '\n' 的组合。这就是为什么它在上面提到的三种情况下都能正常工作的原因。
这种细微差别在少数情况下很重要。例如,我曾经处理过一个包含 HL7 消息的文本文件。HL7 标准要求行尾有一个 '\r' 字符。可是我在 Windows 机器上使用这个消息时,它自动加上了自己的 '\r\n' 行尾字符。因此,每行的结尾看起来像是 '\r\r\n'。如果我使用 rstrip('\r\n'),就会把整个 '\r\r\n' 都去掉,这样就不符合我的需求了。在这种情况下,我干脆直接去掉最后两个字符。
需要注意的是,与 Perl 的 chomp
函数不同,这个方法会去掉字符串末尾所有指定的字符,而不仅仅是一个:
>>> "Hello\n\n\n".rstrip("\n")
"Hello"
186
我想说,想要获取没有结尾换行符的行,最“Python风格”的方法就是使用splitlines()。
>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']
2285
试试这个方法 rstrip()
(查看文档 Python 2 和 Python 3)
>>> 'test string\n'.rstrip()
'test string'
Python 的 rstrip()
方法默认会去掉字符串末尾的所有空白字符,不仅仅是像 Perl 的 chomp
那样只去掉一个换行符。
>>> 'test string \n \r\n\n\r \n\n'.rstrip()
'test string'
如果只想去掉换行符:
>>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
'test string \n \r\n\n\r '
除了 rstrip()
,还有 strip()
和 lstrip()
这两个方法。下面是这三者的一个例子:
>>> s = " \n\r\n \n abc def \n\r\n \n "
>>> s.strip()
'abc def'
>>> s.lstrip()
'abc def \n\r\n \n '
>>> s.rstrip()
' \n\r\n \n abc def'