Почему CSV-файл содержит пустую строку между каждой строкой данных при выводе с помощью Dictwriter в Python [дубликат]
этот вопрос уже есть ответ здесь:
Я использую DictWriter для вывода данных в словаре в csv-файл. Почему CSV-файл имеет пустую строку между каждой строкой данных? Это не огромное дело, но мой набор данных большой и не помещается в один файл csv, потому что он имеет слишком много строк, так как "двойной интервал" удваивает количество строк в файле.
мой код для записи в словарь:
headers=['id', 'year', 'activity', 'lineitem', 'datum']
output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers)
output.writerow(dict((fn,fn) for fn in headers))
for row in rows:
output.writerow(row)
4 ответов:
по умолчанию, классы
csvмодуль использует Терминаторы линий в стиле Windows (\r\n) вместо Unix-стиля (\n). Может ли это быть причиной очевидных двойных разрывов линий?если это так, вы можете переопределить его в
DictWriterконструктора:output = csv.DictWriter(open('file3.csv','w'), delimiter=',', lineterminator='\n', fieldnames=headers)
от http://docs.python.org/library/csv.html#csv.writer:
Вы также можете использоватьЕсли csvfile является файловым объектом, он должен быть открыт с включенным флагом ' b платформы, где это имеет значение.
withоператор, чтобы закрыть файл, когда вы закончите писать в него.
Проверенный пример ниже:from __future__ import with_statement # not necessary in newer versions import csv headers=['id', 'year', 'activity', 'lineitem', 'datum'] with open('file3.csv','wb') as fou: # note: 'wb' instead of 'w' output = csv.DictWriter(fou,delimiter=',',fieldnames=headers) output.writerow(dict((fn,fn) for fn in headers)) output.writerows(rows)
изменение 'w '(запись) в этой строке:
output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers)To ' wb '(write binary) исправлена эта проблема для меня:
output = csv.DictWriter(open('file3.csv','wb'), delimiter=',', fieldnames=headers)кредит @dandrejvv для решения в комментарии к исходному сообщению выше.
Я только что проверил ваш фрагмент, и их здесь нет двойной строки интервала. Конец строки
\r\n, Так что я бы проверил в вашем случае:
- ваш редактор читает правильно DOS файл
- нет \n существуют в значениях ваших строк dict.
(обратите внимание, что даже поставив значение с \n, DictWriter автоматически цитирует значение.)
Comments