文件abc的内容:
a
b
c
代码是
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)
但是输出是:
4
3
那为什么呢?
因为.splitlines()
不包括末尾的空行,而.split('n')
为最后一个...n
:返回一个空字符串
>>> 'lastn'.split('n')
['last', '']
>>> 'lastn'.splitlines()
['last']
str.splitlines()
文档中明确提到了这一点:
与
split()
不同,当给定分隔符字符串sep时,此方法为空字符串返回一个空列表,并且结束换行不会导致额外的行。
如果没有尾随换行符,则输出相同:
>>> 'last'.split('n')
['last']
>>> 'last'.splitlines()
['last']
换句话说,str.split()
不会添加任何内容,但str.splitlines()
会删除。
您可能有一个尾随的换行符:
>>> s = 'anbncn' # <-- notice the n at the end
>>>
>>> s.split('n')
['a', 'b', 'c', '']
>>>
>>> s.splitlines()
['a', 'b', 'c']
请注意,split()
在末尾留下一个空字符串,而splitlines()
没有。
顺便说一句,您不应该使用str
作为变量名,因为它已经被内置函数使用了。