split("\n")是否添加了新行?

use*_*154 0 python split python-2.7

文件abc的内容:

a
b
c
Run Code Online (Sandbox Code Playgroud)

代码是

data_fh = open("abc")
str = data_fh.read()
arr = str.split("\n")
print len(arr)
data_fh.seek(0)
arr = data_fh.read().splitlines()
print len(arr)
Run Code Online (Sandbox Code Playgroud)

但输出是:

4
3
Run Code Online (Sandbox Code Playgroud)

那为什么呢?

Mar*_*ers 5

因为最后.splitlines()不包括空行,而.split('\n')为最后一行返回一个空字符串...\n:

>>> 'last\n'.split('\n')
['last', '']
>>> 'last\n'.splitlines()
['last']
Run Code Online (Sandbox Code Playgroud)

这在str.splitlines()文档中明确提到:

与给定split()分隔符字符串sep时不同,此方法返回空字符串的空列表,并且终端换行符不会产生额外的行.

如果没有尾随换行符,则输出相同:

>>> 'last'.split('\n')
['last']
>>> 'last'.splitlines()
['last']
Run Code Online (Sandbox Code Playgroud)

换句话说,str.split()不添加任何内容,但str.splitlines()会删除.