5.16 字符串的分割技巧 ===================== .. image:: http://image.iswbm.com/20200804124133.png 当我们对字符串进行分割时,且分割符是 ``\n``\ ,有可能会出现这样一个窘境: .. code:: python >>> str = "a\nb\n" >>> print(str) a b >>> str.split('\n') ['a', 'b', ''] >>> 会在最后一行多出一个元素,这可就太多余了吧。 实际上对于这种情况,你可以直接这样子 .. code:: python >>> str = "a\nb\n" >>> >>> str.split() ['a', 'b'] 即使是多个换行符,也照样适用 .. code:: python >>> str = "a\n\nb\n\n" >>> >>> str.split() ['a', 'b'] 有的人还会建议使用 ``splitlines`` .. code:: python >>> str = "a\nb\n" >>> >>> str.splitlines() ['a', 'b'] 但其实,splitlines 方法只有在上面这种仅一个换行符的场景下,才能达到如上预期的。比如下边的案例,就无法适用: .. code:: python >>> 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 是为换行符为界将字符串分成多个,但并不是直接拿掉换行符。 .. code:: python >>> str = "a\nb\n" >>> str.splitlines(True) ['a\n', 'b\n'] 因此在多个换行符的情况下,请务必使用 split 方法。