以平台无关的方式拆分双新线

时间:2015-08-20 14:35:41

标签: 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

示例输入:

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

string.split(2*os.linesep)

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

codecs.open(filename, 'U')

答案 1 :(得分:2)

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

简单的解决方案是用空字符串替换\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")