拆分( "n" ) 会添加新行吗?



文件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作为变量名,因为它已经被内置函数使用了。

最新更新