我该如何去除多余的换行符?

2024-04-25 06:18:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 函数字符串字符perlchomp
3条回答

我想说的是“pythonic”的方法来获得没有尾随换行符的行是splitlines()。

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

尝试方法rstrip()(参见文档Python 2Python 3

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

Python的rstrip()方法默认情况下会删除所有类型的尾随空白,而不是像Perl使用^{}时那样只删除一个换行符。

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

删除行尾(EOL)字符的标准方法是使用string r strip()方法删除任何尾随的字符。\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'作为r strip的参数意味着它将去掉'\r'或'\n'的任何尾随组合。这就是为什么它在以上三种情况下都有效。

这种细微差别在极少数情况下很重要。例如,我曾经不得不处理一个包含HL7消息的文本文件。HL7标准要求尾随'\r'作为其下线字符。我正在使用此消息的Windows计算机附加了自己的下线字符。因此,每行的结尾看起来像'\r\n'。使用rstrip('\r\n')会去掉整个'\r\n',这不是我想要的。在这种情况下,我只是把最后两个字符切掉。

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

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

相关问题 更多 >