译(二十六)-Python怎么去除末尾的换行符?
如有翻译问题欢迎评论指出,谢谢。
以后换个标题,原来的开头太长了,而且格式有点固定,毕竟说不定我以后还会找点其它的翻。
Python怎么去除末尾的换行符?
-
RidingThisToTheTop asked:
- Pyhon中与Perl的
chomp
等效的函数有哪些?chomp
能实现移除新行中最后的字符。
- Pyhon中与Perl的
-
Answers:
- Ryan Ginstrom - vote: 2094
-
rstrip()
可以实现(见Python 2 与 Python 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
能实现移除新行中最后的字符。
- What is the Python equivalent of Perl\'s
-
Answers:
- Ryan Ginstrom - vote: 2094
-
Try the method
rstrip()
(see doc Python 2 and Python 3)
rstrip()
可以实现(见Python 2 与 Python 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 withchomp
.
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()
andstrip()
:
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"
共有 0 条评论