\n
is converted to os.linesep
for files opened in text-mode. So when you write os.linesep
to a text-mode file on Windows, you write \r\n
, and the \n
gets converted resulting in \r\r\n
.
See also the docs:
Do not use os.linesep as a line terminator when writing files opened in text mode (the default); use a single ‘\n’ instead, on all platforms.