文章摘要
Python的str.splitlines()方法不仅能识别常见的换行符(\n、\r、\r\n),还支持更多特殊字符作为分隔符,包括制表符、分页符等控制字符和Unicode分隔符,其功能比"通用换行符"更全面。
文章总结
Python的splitlines方法:不只是处理换行符那么简单
(感谢Seth Larson引发我对这个问题的深入探索)
我一直以为Python的str.splitlines()方法只是按照"通用换行符"(即\n、\r和\r\n)来分割字符串。但事实上,这个方法的功能要强大得多。
根据官方文档,splitlines()方法支持以下所有行边界符: - \n 换行符 - \r 回车符 - \r\n 回车+换行 - \v或\x0b 行制表符 - \f或\x0c 换页符 - \x1c 文件分隔符 - \x1d 组分隔符 - \x1e 记录分隔符 - \x85 下一行(C1控制码) - \u2028 行分隔符 - \u2029 段落分隔符
这导致了一些出人意料的分割行为。例如:
python
s = "line1\nline2\rline3\r\nline4\vline5\x1dhello"
s.splitlines()
实际输出是:
['line1', 'line2', 'line3', 'line4', 'line5', 'hello']
而不是预期的: ["line1", "line2", "line3", "line4\vline5\x1dhello"]
这个发现很好地提醒我们:Unicode并不等同于"可打印字符",在编程中仍然有很多系统会使用C0和C1控制码来实现特定功能。
评论总结
总结评论内容:
- 对splitlines()功能的质疑:
- 认为文章没有提供额外价值:"This article provides no additional value to the splitlines() docs."(评论1)
- 指出split()可以实现相同功能:"str.split() function does the same"(评论6)
- 替代方案建议:
- 推荐使用Unicode字符类:"I really like Unicode named characters classes for more precise splitting"(评论2)
- 建议使用正则表达式:"linesep_splitter = re.compile(r'\n|\r\n?')"(评论6)
- 推荐更地道的文件读取方式:"for line in file: is more idiomatic"(评论5)
- 其他相关功能提及:
- 提到strip()系列函数的扩展用法:"strip(), rstrip(), lstrip() can strip other kinds of characters"(评论7)
- 指出潜在安全问题:"Useful to know for security purposes, surprises like that might cause vulnerabilities"(评论8)
- 新手反馈:
- 表示学到了新知识:"TIL: Python has a splitlines function"(评论4)
- 幽默调侃:
- 调侃缺少HTML换行符处理:"What, no
?"(评论3)