译(二十六)-Python怎么去除末尾的换行符?

stackoverflow热门问题目录

如有翻译问题欢迎评论指出,谢谢。

以后换个标题,原来的开头太长了,而且格式有点固定,毕竟说不定我以后还会找点其它的翻。

Python怎么去除末尾的换行符?

  • RidingThisToTheTop asked:
    • Pyhon中与Perl的chomp等效的函数有哪些?chomp能实现移除新行中最后的字符。
  • Answers:
    • Ryan Ginstrom – vote: 2094
    • 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 '
    • Python中还有类似的函数,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'
    • Mike – vote: 178
    • Python中,可以通过splitlines()来消除文本中的换行符。
    • >>> text = "line 1\nline 2\r\nline 3\nline 4"
      >>> text.splitlines()
      ['line 1', 'line 2', 'line 3', 'line 4']
    • Sameer Siruguri – vote: 159
    • 删除EOL(end-of-line)字符'\r''\n'的公认做法是使用字符串函数rstrip()。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'。所以上面的三种情况都能正常处理。
    • 不过,Python的strip()处理在少数情况下还是有不足的。例如,我以前有处理过一个包含HL7信息的文件(HL7标准需要以'\r'作为EOL字符)。而我的Windows又会在文本末尾加入Windows的EOL字符'\r\n',所以每行的结尾就变成了'\r\r\n'。使用rstrip('\r\n')会把所有的'\r''\n'删除,但我不希望这样。为了处理这个问题,我是只对最后的两个字符使用rstrip()函数。
    • 要注意,Python的strip()与Perl的chomp不同,strip()会去除字符串末尾的所有特殊字符,不止一个:
    • >>> "Hello\n\n\n".rstrip("\n")
      "Hello"

How can I remove a trailing newline?

  • RidingThisToTheTop asked:
    • What is the Python equivalent of Perl\’s chomp function, which removes the last character of a string if it is a newline?
      Pyhon中与Perl的chomp等效的函数有哪些?chomp能实现移除新行中最后的字符。
  • Answers:
    • Ryan Ginstrom – vote: 2094
    • Try the method rstrip() (see doc Python 2 and Python 3)
      rstrip()可以实现(见Python 2Python 3文档)
    • >>> 'test string\n'.rstrip()
      'test string'
    • Python\’s rstrip() method strips all kinds of trailing whitespace by default, not just one newline as Perl does with chomp.
      Python的rstrip()函数默认分割所有的末尾空白符,而不像Perl的chomp只移除新行。
    • >>> 'test string \n \r\n\n\r \n\n'.rstrip()
      'test string'
    • To strip only newlines:
      只分割新行:
    • >>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
      'test string \n \r\n\n\r '
    • There are also the methods strip(), lstrip() and strip():
      Python中还有类似的函数,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'
    • Mike – vote: 178
    • And I would say the pythonic way to get lines without trailing newline characters is splitlines().
      Python中,可以通过splitlines()来消除文本中的换行符。
    • >>> text = "line 1\nline 2\r\nline 3\nline 4"
      >>> text.splitlines()
      ['line 1', 'line 2', 'line 3', 'line 4']
    • Sameer Siruguri – vote: 159
    • The canonical way to strip end-of-line (EOL) characters is to use the string rstrip() method removing any trailing \r or \n. Here are examples for Mac, Windows, and Unix EOL characters.
      删除EOL(end-of-line)字符'\r''\n'的公认做法是使用字符串函数rstrip()。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'
    • Using \’\r\n\’ as the parameter to rstrip means that it will strip out any trailing combination of \’\r\’ or \’\n\’. That\’s why it works in all three cases above.
      使用参数为'\r\n'rstrip()可以去除文本末尾的'\r''\n'。所以上面的三种情况都能正常处理。
    • This nuance matters in rare cases. For example, I once had to process a text file which contained an HL7 message. The HL7 standard requires a trailing \’\r\’ as its EOL character. The Windows machine on which I was using this message had appended its own \’\r\n\’ EOL character. Therefore, the end of each line looked like \’\r\r\n\’. Using rstrip(\’\r\n\’) would have taken off the entire \’\r\r\n\’ which is not what I wanted. In that case, I simply sliced off the last two characters instead.
      不过,Python的strip()处理在少数情况下还是有不足的。例如,我以前有处理过一个包含HL7信息的文件(HL7标准需要以'\r'作为EOL字符)。而我的Windows又会在文本末尾加入Windows的EOL字符'\r\n',所以每行的结尾就变成了'\r\r\n'。使用rstrip('\r\n')会把所有的'\r''\n'删除,但我不希望这样。为了处理这个问题,我是只对最后的两个字符使用rstrip()函数。
    • Note that unlike Perl\’s chomp function, this will strip all specified characters at the end of the string, not just one:
      要注意,Python的strip()与Perl的chomp不同,strip()会去除字符串末尾的所有特殊字符,不止一个:
    • >>> "Hello\n\n\n".rstrip("\n")
      `"Hello"

You may also like...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注