如何去除末尾的换行符?

2043 投票
28 回答
2412212 浏览
提问于 2025-04-11 09:36

如果字符串的最后一个字符是换行符,我该如何去掉它呢?

"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 2Python 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'

撰写回答