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

时间:2013-08-08 14:11:49

标签: python python-2.7 split

文件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

那为什么呢?

2 个答案:

答案 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}}。