如何在全局范围内更改通用行结束行为?

How can I alter the universal line ending behavior globally?

我想在 Windows 上写出所有以 LF 而不是 CRLF 结尾的文本文件。不仅适用于我的代码,还适用于所有其他第三方依赖项。

我知道我可以 open(..., newline='\n', ...) 获取我的代码。但是有写入文件的外部包,它们 open() 没有这样的选项,所以这些文件在 universal line ending mode 中打开并最终以 CRLF 写入。

如何在 Windows 上将默认行为从 CRLF 更改为 LF?显然试图覆盖 os.linesep = '\n' 没有成功。

你可以monkey-patch open:

import builtins

orig_open = open


def my_open(
    file,
    mode="r",
    buffering=-1,
    encoding=None,
    errors=None,
    newline=None,
    closefd=True,
    opener=None,
):
    return orig_open(
        file,
        mode,
        buffering,
        encoding,
        errors,
        newline="\n",
        closefd=closefd,
        opener=None,
    )


builtins.open = my_open