'How can I alter the universal line ending behavior globally?

I want to write out all text files with LF as ending instead of CRLF on Windows. Not just for my code, but for all other third-party dependencies as well.

I know I can just open(..., newline='\n', ...) for my codes. But there are external packages that write files and they open() without such options, so those files are opened in universal line ending mode and ends up being written in CRLF.

How can I change the default behavior from CRLF to LF on Windows? Apparently trying to overwrite os.linesep = '\n' didn't work.



Solution 1:[1]

You could 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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1