Python 3:
The official csv
documentation recommends open
ing the file with newline=""
on all platforms to disable universal newlines translation:
with open('output.csv', 'w', newline="", encoding='utf-8') as f:
writer = csv.writer(f)
...
The CSV writer terminates each line with the lineterminator
of the dialect, which is '\r\n'
for the default excel
dialect on all platforms because that’s what RFC 4180 recommends.
Python 2:
On Windows, always open your files in binary mode ("rb"
or "wb"
), before passing them to csv.reader
or csv.writer
.
Although the file is a text file, CSV is regarded a binary format by the libraries involved, with \r\n
separating records. If that separator is written in text mode, the Python runtime replaces the \n
with \r\n
, hence the \r\r\n
observed in the file.
See this previous answer.