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)
那为什么呢?
因为最后.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()会删除.