【问题标题】:Split double new lines in platform independent manner以独立于平台的方式拆分双新行
【发布时间】:2015-08-20 14:35:41
【问题描述】:

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

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() 独立于平台工作,但是如何以独立于平台的方式在实体之间拆分两条新线?

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

【问题讨论】:

    标签: python string newline


    【解决方案1】:

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

    string.split(2*os.linesep)
    

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

    codecs.open(filename, 'U')
    

    【讨论】:

    • 如果我不知道文件是在哪个平台上准备的怎么办?例如,文件是在 windows 上准备好的,我可以在 osx 上解析?
    【解决方案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")
    

    【讨论】:

    • 它工作得很好,我希望在 python 模块中处理这种情况,但这也很好,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多