协慌网

登录 贡献 社区

如何在 Python 中删除尾部换行符?

什么是 Perl 的chomp函数的 Python 等价物,如果它是换行符,它会删除字符串的最后一个字符?

答案

尝试使用rstrip()方法(参见 doc Python 2Python 3

>>> 'test string\n'.rstrip()
'test string'

Python 的rstrip()方法默认情况下会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 '

还有方法lstrip()strip()

>>> 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'

而且我会说 “pythonic” 获取没有尾随换行符的行的方法是 splitlines()。

>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']

剥离行尾(EOL)字符的规范方法是使用字符串 rstrip()方法删除任何尾部 \ r 或 \ n。以下是 Mac,Windows 和 Unix EOL 字符的示例。

>>> '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 标准要求尾随 '\ n' 作为其 EOL 字符。我使用此消息的 Windows 机器附加了自己的 '\ r \ n'EOL 字符。因此,每行的结尾看起来像 '\ r \ n \ r \ n'。使用 rstrip('\ r \ n')会取消整个 '\ r \ n \ n \ n',这不是我想要的。在那种情况下,我只是将最后两个字符切掉。

请注意,与 Perl 的chomp函数不同,这将删除字符串末尾的所有指定字符,而不仅仅是一个:

>>> "Hello\n\n\n".rstrip("\n")
"Hello"