以跨平台方式分割双换行符

4

我需要以平台无关的方式执行以下操作:

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

示例输入:

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

读取文件后,在Mac OSX上使用string.split('\n\n')可以正常工作,但这似乎不是处理此问题的跨平台方式(文件可能在另一个操作系统上准备)。

我知道string.splitlines()可以实现跨平台,但如何以跨平台的方式分隔实体之间的两个新行?

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

2个回答

6

Python内置了一个处理这个问题的工具:os.linesep。因此,您可以使用:

string.split(2*os.linesep)

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

codecs.open(filename, 'U')

3
如果我不知道文件在哪个平台上准备的怎么办?比如,文件是在Windows上准备的,我能否在OS X上解析它? - ayyayyekokojambo

5
目前有两种主要的分隔符:\n - Unix系统和\r\n - Windows系统(旧版Mac OS使用\r,但现在几乎不再使用)。
简单的解决方案是将\r替换为空字符串,并且之后只使用\n。如果你想支持\r,则检查字符串中是否存在\n,并将所有\r替换为\n
下面的代码将\r\n \n\r \n \r变体转换为\n
if "\n" in data:
    data = data.replace("\r", "")
else:
    data = data.replace("\r", "\n")

显然它有效,我本来希望能够在Python模块中处理这种情况,但这也很好,谢谢。 - ayyayyekokojambo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接