5.16 字符串的分割技巧¶
当我们对字符串进行分割时,且分割符是
\n
,有可能会出现这样一个窘境:
>>> str = "a\nb\n"
>>> print(str)
a
b
>>> str.split('\n')
['a', 'b', '']
>>>
会在最后一行多出一个元素,这可就太多余了吧。
实际上对于这种情况,你可以直接这样子
>>> str = "a\nb\n"
>>>
>>> str.split()
['a', 'b']
即使是多个换行符,也照样适用
>>> str = "a\n\nb\n\n"
>>>
>>> str.split()
['a', 'b']
有的人还会建议使用 splitlines
>>> str = "a\nb\n"
>>>
>>> str.splitlines()
['a', 'b']
但其实,splitlines 方法只有在上面这种仅一个换行符的场景下,才能达到如上预期的。比如下边的案例,就无法适用:
>>> str = "a\n\nb\n\n"
>>>
>>> str.splitlines()
['a', '', 'b', '']
在这里有必要补充下,对 splitlines 的原理做一些说明
其实 splitlines 函数还有一个 keepends 参数 ,意思是 是否要保留换行符 (‘:raw-latex:`\r'`,’:raw-latex:`\r\n`‘,’:raw-latex:`\n`’)
默认值为 False,也正是这个原因,上面的例子才有那样的效果 – 去掉了最后一个元素
试着指定该参数为 True,你就会发现,原来 splitlines 是为换行符为界将字符串分成多个,但并不是直接拿掉换行符。
>>> str = "a\nb\n"
>>> str.splitlines(True)
['a\n', 'b\n']
因此在多个换行符的情况下,请务必使用 split 方法。