import csv
outfile = file('test.csv', 'w')
writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
writer.writerow(['hi','dude'])
writer.writerow(['hi2','dude2'])
outfile.close()
Это генерирует файл, test.csv
, с дополнительным \r
в каждой строке, как так:
hi,dude\r\r\nhi2,dude2\r\r\n
вместо ожидаемого:
hi,dude\r\nhi2,dude2\r\n
Почему это происходит, или это - на самом деле желаемое поведение?
newline=''
with open('output.csv', 'w', newline='') as f:
writer = csv.writer(f)
...
newline='\n'
with open('output.csv', 'w', newline='\n', encoding='utf-8') as f:
writer = csv.writer(f)
...
В Windows всегда открывайте файлы в двоичном режиме ("rb"
или "wb"
), прежде чем передавать их в csv. reader
или csv.writer
.
Хотя файл является текстовым, CSV рассматривается соответствующими библиотеками как двоичный формат, с \r\n
разделителем записей. Если этот разделитель записан в текстовом режиме, среда выполнения Python заменяет \n
на \r\n
, отсюда \r\r\n
, наблюдаемый в файле.
Я не уверен, почему именно это происходит, но изменение режима файла с "w" на "wb" исправляет ситуацию. Подробнее см. мой ответ на "как удалить ^M".