CSV in Python adding an extra carriage return, on Windows

前端 未结 6 1083
慢半拍i
慢半拍i 2020-11-22 07:14
import csv
outfile = file(\'test.csv\', \'w\')
writer = csv.writer(outfile, delimiter=\',\', quoting=csv.QUOTE_MINIMAL)
writer.writerow([\'hi\',\'dude\'])
writer.wri         


        
6条回答
  •  不知归路
    2020-11-22 07:52

    Python 3:

    The official csv documentation recommends opening 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.


    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.

提交回复
热议问题