尝试使用rstrip()
方法(参见 doc Python 2和Python 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"