以独立于平台的方式拆分双新行

ayy*_*mbo 4 python string newline

我需要以独立于平台的方式遵循:

1) read the file with using codecs.open() (for utf-8)
2) split lines according to two new lines.
3) split entities according to new line
Run Code Online (Sandbox Code Playgroud)

示例输入:

1) FIRST UTF-8 ENTITY ????\n 
2) SECOND ELEMENT OF FIRST ENTITY\n 
\n\n 
1) SECOND ENTITIY\n
2) SECOND ELEMENT OF SECOND ENTITIY\n
Run Code Online (Sandbox Code Playgroud)

读取文件后, string.split('\n\n') 在 mac osx 中工作,但它似乎不是平台独立的处理方式(文件可能在另一个操作系统上准备)。

我知道 string.splitlines() 独立于平台工作,但是如何以独立于平台的方式在实体之间拆分两条新行?

编辑:文件可能在任何平台上准备,因此可能有任何类型的行尾。

Ben*_*rut 6

Python 有一个内置工具来处理这个问题:os.linesep. 所以你可以使用:

string.split(2*os.linesep)
Run Code Online (Sandbox Code Playgroud)

使用通用模式打开文本文件。

codecs.open(filename, 'U')
Run Code Online (Sandbox Code Playgroud)

  • 如果我不知道该文件是在哪个平台上准备的怎么办?例如,文件是在 Windows 上准备好的,我可以在 osx 上解析吗? (3认同)

ISa*_*ych 5

目前使用的分隔符主要有两种类型:\n- unices 和\r\n- windows (\r在旧的 mac os 上使用,现在几乎不使用)

简单的解决方案是替换\r为空字符串,然后仅使用\n. 如果您想支持,\r请检查\nstring 中不存在并将全部替换\r\n.

下一个代码将变\r\n \n\r \n \r体转换为\n

if "\n" in data:
    data = data.replace("\r", "")
else:
    data = data.replace("\r", "\n")
Run Code Online (Sandbox Code Playgroud)