Нет новых строк в CSV, когда поле Dict пусто [Python, CSV] - PullRequest
0 голосов
/ 22 августа 2011

Я новичок в Python (на самом деле я использую версию 2.7)

Мой код на самом деле работает хорошо (это простой) но он вставляет новые строки между результатами в моем выходном файле. Я заметил, что они упомянули об этом в документации (см. Далее), но нет способа избежать автоматической вставки новой строки, когда поле пусто.

Кто-нибудь, кто мог бы помочь мне?

new= csv.DictReader(ifile,fieldnames=None)
output = csv.DictWriter(ofile,fieldnames=None,dialect='excel',delimiter="\t")


for item in new:
    output.writer.writerow(item.values())
    print item

Изменено в версии 2.5: теперь синтаксический анализатор стал более строгим по отношению к многострочным кавычкам. Ранее, если строка заканчивалась в указанном поле без завершающего символа новой строки, новая строка была бы вставлена ​​в возвращаемое поле . Такое поведение вызывало проблемы при чтении файлов, содержащих символы возврата каретки внутри полей. Поведение было изменено, чтобы возвращать поле без вставки новых строк. Как следствие, если важны символы новой строки, встроенные в поля, ввод должен быть разбит на строки таким образом, чтобы сохранить символы новой строки .

Результаты:

{'Url;Site Source;Communaute': 'lafranceagricole.fr;Site Media;'} {'Url;Site Source;Communaute': 'economiesolidaire.com;Blog;'} {'Url;Site Source;Communaute': 'arpentnourricier.org;Blog;'} {'Url;Site Source;Communaute': 'arpentnourricier.org;Blog;'} {'Url;Site Source;Communaute': 'mamienne.canalblog.com;Blog;'}

Итак, у меня ошибка, мой заголовок становится ключом, а не простым заголовком. как я хотел (Url; Источник сайта; Communauté) {Lafranceagricole.fr; Медиа сайта}

В моем csv нет пустой строки, поэтому новая строка может не создаваться пустым полем. Возможно, поле Сообщество по умолчанию пусто, создайте новую строку

1 Ответ

1 голос
/ 22 августа 2011

Если вы хотите, чтобы ; был разделителем полей, вы должны указать, что:

new = csv.reader(ifile, delimiter=';')
output = csv.writer(ofile,dialect='excel',delimiter="\t")
for item in new:
    output.writerow(item)

Это работает так же хорошо, как DictReader для разделения полей.

Записывает поля табуляции с разделителями;Я не вижу пустых строк вообще.


Старый ответ до выяснения вопроса

Мне не понятно, почему вы используетеDictReader для чтения ввода, если вам нужны только значения ячеек, а не имена полей.Однако, если по какой-то причине вам нужно использовать DictReader:

from itertools import chain
output.writer.writerow(list(chain.from_iterable(item.values() for item in new)))

Запишет все значения, разделенные табуляцией, в выходной файл, без переносов между ними.

Если вам на самом деле не нужен DictReader,

new = csv.reader(ifile)
output = csv.writer(ofile,dialect='excel',delimiter="\t")

next(new) # to skip the field names
output.writerow(list(chain.from_iterable(new)))

Будет снова записывать ячейки как одну строку, разделенные табуляцией, в выходной файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...