Python CSV: поле, содержащее кавычки в начале

Я пытаюсь прочитать CSV-файл, содержащий следующую строку:

test,"test,"test,test,test,test

Возникла проблема с кавычками (есть шесть полей, но они извлекаются как пять полей, как «тест», тест читается как одно поле).

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

test,""test,""test,test,test,test  # quotation marks disappear when the entry is read.

test,\"test,\"test,test,test,test  # backslashes are also retrieved; escaping doesn't seem to work.

Я читаю файл CSV таким образом:

info_source = csv.reader(open('.info.csv'), skipinitialspace=True)

for row in ling_info_source:
    data = row[1].strip()
    ...

person David    schedule 09.02.2012    source источник


Ответы (2)


По умолчанию " - это символ цитирования модуля csv Python. Использовать

csv.reader(open('.info.csv'), skipinitialspace=True, quotechar=None)

чтобы отключить это значение по умолчанию. Приведенный вами пример приведет к записи

['test', '"test', '"test', 'test', 'test', 'test']
person Sven Marnach    schedule 09.02.2012
comment
Проблема с этим решением в том, что я не могу читать такие случаи, как: [test, test, test, commaToRead, commaToRead, test, test]. В этом случае я должен прочитать: [test] [test] [test] [commaToRead, commaToRead] [test] [test]. Является ли это возможным? - person David; 09.02.2012
comment
@ Дэвид: Это неоднозначно. Как парсер должен знать, какие двойные кавычки предназначены для цитирования, а какие нет? - person Sven Marnach; 09.02.2012
comment
Я подумал, что должен добавить это, потому что это то, что мне нужно было проверить, чтобы уточнить: символ цитирования применяется только в том случае, если он появляется сразу после разделителя. То есть символ цитирования должен быть первым символом в новом разделе с разделителями, чтобы аннулировать любые разделители в тексте. - person Zhouster; 30.07.2014
comment
Я думаю, что парсер должен видеть, что в кавычках "test, "test, следует test, а в кавычках "commaToRead,commaToRead", следует запятая - person Winand; 19.12.2015

Вы можете добавить аргумент quoting=csv.QUOTE_NONE к reader()

person Janne Karila    schedule 09.02.2012
comment
Хотя использование quotechar=None, как в моем ответе, работает нормально, quoting=csv.QUOTE_NONE, похоже, является документированным способом отключить цитирование в ридере. - person Sven Marnach; 09.02.2012