5.16 字符串的分割技巧

http://image.iswbm.com/20200804124133.png

当我们对字符串进行分割时,且分割符是 \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 方法。