如何删除(chomp)Python中的尾随换行符?

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


尝试方法rstrip() (请参阅文档Python 2和Python 3)

>>> 'test stringn'.rstrip()
'test string'

Python的rstrip()方法默认剥离各种尾随空白,而不仅仅是Perl对chomp所做的一个新行。

>>> 'test string n rnnr nn'.rstrip()
'test string'

仅剥离换行符:

>>> 'test string n rnnr nn'.rstrip('n')
'test string n rnnr '

还有方法lstrip()strip()

>>> s = "   nrn  n  abc   def nrn  n  "
>>> s.strip()
'abc   def'
>>> s.lstrip()
'abc   def nrn  n  '
>>> s.rstrip()
'   nrn  n  abc   def'

我会说“pythonic”的方式来获取没有结尾换行符的行是splitlines()。

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

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

>>> 'Mac EOLr'.rstrip('rn')
'Mac EOL'
>>> 'Windows EOLrn'.rstrip('rn')
'Windows EOL'
>>> 'Unix EOLn'.rstrip('rn')
'Unix EOL'

使用' r n'作为rstrip的参数意味着它会去掉任何' r'或' n'的尾部组合。 这就是为什么它在上述所有三种情况下都有效。

这种细微差别很重要。 例如,我曾经处理过一个包含HL7消息的文本文件。 HL7标准要求在尾部的' r'作为其EOL字符。 我使用此消息的Windows机器上附有其自己的' r n'EOL字符。 因此,每行的结尾看起来像' r r n'。 使用rstrip(' r n')会将整个' r r n'取下来,这不是我想要的。 在这种情况下,我只是将最后两个字符切掉。

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

>>> "Hellonnn".rstrip("n")
"Hello"
链接地址: http://www.djcxy.com/p/13517.html

上一篇: How can I remove (chomp) a trailing newline in Python?

下一篇: How to flush output of Python print?