Hacker News 中文摘要

RSS订阅

Python的splitlines功能不止处理换行符 -- Python's splitlines does more than just newlines

文章摘要

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控制码来实现特定功能。

评论总结

总结评论内容:

  1. 对splitlines()功能的质疑:
  • 认为文章没有提供额外价值:"This article provides no additional value to the splitlines() docs."(评论1)
  • 指出split()可以实现相同功能:"str.split() function does the same"(评论6)
  1. 替代方案建议:
  • 推荐使用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)
  1. 其他相关功能提及:
  • 提到strip()系列函数的扩展用法:"strip(), rstrip(), lstrip() can strip other kinds of characters"(评论7)
  • 指出潜在安全问题:"Useful to know for security purposes, surprises like that might cause vulnerabilities"(评论8)
  1. 新手反馈:
  • 表示学到了新知识:"TIL: Python has a splitlines function"(评论4)
  1. 幽默调侃:
  • 调侃缺少HTML换行符处理:"What, no ?"(评论3)