Почему 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)
517   4  

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)

Python v2. 75: Open ()

кредит @dandrejvv для решения в комментарии к исходному сообщению выше.

Я только что проверил ваш фрагмент, и их здесь нет двойной строки интервала. Конец строки \r\n, Так что я бы проверил в вашем случае:

  1. ваш редактор читает правильно DOS файл
  2. нет \n существуют в значениях ваших строк dict.

(обратите внимание, что даже поставив значение с \n, DictWriter автоматически цитирует значение.)

Comments

    Ничего не найдено.