Модуль Python CSV - кавычки пропадают - PullRequest
5 голосов
/ 20 февраля 2012

У меня есть CSV-файл с такими данными

15,"I",2,41301888,"BYRNESS RAW","","BYRNESS VILLAGE","NORTHUMBERLAND","ENG"
11,"I",3,41350101,2,2935,2,2008-01-09,1,8,0,2003-02-01,,2009-12-22,2003-02-11,377016.00,601912.00,377105.00,602354.00,10

Я читаю это, а затем записываю разные строки в разные файлы CSV.

Однако в исходных данных есть кавычки вокруг нечисловых полей, так как некоторые из них содержат запятые внутри поля.

Я не могу сохранить цитаты.

Я исследовал лоты и обнаружил quoting=csv.QUOTE_NONNUMERIC, однако теперь это приводит к кавычкам вокруг каждого поля, и я не знаю, почему ??

Если я попробую один из других вариантов цитирования, таких как МИНИМАЛЬНЫЙ, я получаю сообщение об ошибке, касающееся значения даты, 2008-01-09, а не с плавающей точкой.

Я пытался создать диалект, добавить цитату для читателя и писателя CSV, но ничего из того, что я пробовал, не приводило к точному соответствию исходным данным.

Кто-нибудь сталкивался с такой же проблемой и нашел решение.

Ответы [ 3 ]

7 голосов
/ 20 февраля 2012

При записи quoting=csv.QUOTE_NONNUMERIC сохраняет значения без кавычек, пока они числа , т.е.если их тип int или float (например), это означает, что он напишет то, что вы ожидаете.

Ваша проблема может заключаться в том, что при чтении csv.reader будет поворачивать каждую строку, которую читаетв list из строк (если вы внимательно прочитаете документацию, вы увидите, что читатель не выполняет автоматическое преобразование типов данных!

Если выне выполняйте какие-либо преобразования после прочтения , тогда, когда вы напишите, у вас будет все в кавычках ... потому что все, что вы пишете, является строкой.

Редактировать: изКонечно, поля даты будут заключены в кавычки, потому что они являются , а не числами, что означает, что вы не можете получить точное ожидаемое поведение, используя стандартный csv.writer.

1 голос
/ 20 февраля 2012

Вы уверены, что у вас есть проблемы? Поведение, которое вы описываете, корректно: модуль csv будет заключать строки в кавычки , только если это необходимо для правильного их анализа. Поэтому следует ожидать, что кавычки будут видны только вокруг строк, содержащих запятую, символы новой строки и т. Д. Если вы не получаете ошибок при чтении выходных данных, проблем нет.

0 голосов
/ 20 февраля 2012

Попытка получить «точное соответствие» исходных данных - трудное и потенциально бесполезное усилие.quoting=csv.QUOTE_NONNUMERIC ставьте кавычки вокруг всего, потому что каждое поле было строкой, когда вы его читали.

Ваше беспокойство о том, что некоторые из "цитируемых" полей ввода могут иметь запятые, обычно не так уж важно.Если вы добавили запятую в одно из полей в кавычках и использовали средство записи по умолчанию, поле с запятой автоматически будет заключено в кавычки.

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