文件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
那为什么呢?
答案 0 :(得分:5)
由于.splitlines()
在末尾不包含空行,而.split('\n')
返回最后一个...\n
的空字符串:
>>> 'last\n'.split('\n')
['last', '']
>>> 'last\n'.splitlines()
['last']
str.splitlines()
documentation:
与
split()
不同,当给定分隔符字符串 sep 时,此方法返回空字符串的空列表,并且终止换行符不会产生额外的行。
如果没有尾随换行符,则输出相同:
>>> 'last'.split('\n')
['last']
>>> 'last'.splitlines()
['last']
换句话说,str.split()
不会添加任何内容,但str.splitlines()
会删除。
答案 1 :(得分:2)
您可能有一个尾随换行符:
>>> s = 'a\nb\nc\n' # <-- notice the \n at the end
>>>
>>> s.split('\n')
['a', 'b', 'c', '']
>>>
>>> s.splitlines()
['a', 'b', 'c']
请注意,split()
在末尾留下一个空字符串,而splitlines()
则没有。
顺便说一句,你不应该使用str
作为变量名,因为built-in function已经使用了{{1}}。