【问题标题】:How to disable universal newlines in Python 2.7 when using open()使用 open() 时如何在 Python 2.7 中禁用通用换行符
【发布时间】:2015-08-28 20:11:29
【问题描述】:

我有一个 csv 文件,其中包含两个不同的换行符终止符(\n\r\n)。我希望我的 Python 脚本使用 \r\n 作为换行符终止符,而不是 \n。但问题是,当我使用open() 打开文件时,Python 的通用换行功能不断将所有内容标准化为\n

奇怪的是,当我编写这个脚本时,它从来没有用来规范化我的换行符,这就是我使用 Python 2.7 并且它运行良好的原因。但是今天突然间它开始规范一切,我的脚本不再按需要工作。

使用open() 打开文件时如何禁用通用换行符(不以二进制模式打开)?

【问题讨论】:

    标签: python python-2.7 newline


    【解决方案1】:

    您需要按照模块文档中的说明以二进制模式打开文件:

    with open(csvfilename, 'rb') as fileobj:
        reader = csv.reader(fileobj)
    

    来自csv.reader() documentation

    如果 csvfile 是文件对象,则必须在不同的平台上使用“b”标志打开它。

    在二进制模式下,不会发生行分隔符转换。

    【讨论】:

    • 对不起,我应该澄清一下。我正在打开一个 csv 文件。但它没有被csv.reader() 阅读。它被打开并作为普通文件读取,而不是 csv 文件对象。这有什么区别吗?另外,我听说有一种方法可以在某处使用--without-universal-newlines 禁用python 中的通用换行符。但这就是我所知道的。你碰巧知道这件事吗?我认为它会在某个配置文件中。
    • @CM-Dev:然后以二进制模式打开文件仍然是最好的主意。为什么使用csv 模块?为什么要重新发明那个轮子?
    • @CM-Dev:但是请注意,通用换行支持功能通常对使用open()访问的文件对象启用。您必须使用rU 模式来启用它。见python.org/dev/peps/pep-0278。默认情况下,它是适用于文本文件的标准操作系统翻译。
    • 我不使用csv 模块的原因很长。但总而言之,它会导致我的 csv 列中的内容出现问题,并且使用读取的标准文件有效(尽管现在不是哈哈)。此外,我也确实看到了相同的页面,但由于某种原因它已启用,我不知道如何或为什么。我什至尝试指定文件模式,以防它出于某种原因使用 rU 作为默认值,但它仍然不起作用。
    • 对不起,如果这是一个愚蠢的问题......但我刚刚发现这个页面讨论--without-universal-newlineshttps://docs.python.org/2.3/whatsnew/node7.html 它提到您可以通过在 Python 的配置脚本中添加通用换行符来禁用通用换行符。你知道我在哪里可以找到配置脚本吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多