Почему при вызове csv.reader в результате получается список из одной строки, если в строках файла есть данные с кавычками?

import csv  
with open(r'C:\file.csv') as c:  
   data = csv.reader(c, delimiter=',')  
    for i in data:  
      print(i)  

При таком вызове, если в строке файла есть данные с кавычками, то в результате получаем следующее:

['2394487,HH704662,10/10/2002 11:03:40 AM,002XX S LAFLIN ST,2860,PUBLIC PEACE VIOLATION,FALSE POLICE REPORT,"SCHOOL, PUBLIC, BUILDING",false,false,1211,012,2,28,24']

В списке только одна строка. В остальных строках без кавычек, получаю данные в виде списка строк.


Ответы (1 шт):

Автор решения: MaxU

Подозреваю, что у вас сломанный/некорректный CSV файл, т.к. если бы он был правильным, то csv.reader() правильно бы его прочитал.

Пример

Исходный CSV файл (обратите внимание на первое поле в последней строке, где в ячейке присутствуют запятые (разделитель)):

name,zip
First Bank,12345
"Jhonson, Brenson, Eriksson and brothers",98765

В таких случаях все значение ячейки нужно заключить в кавычки - символ квотирования и тогда csv.reader() правильно разберет данные:

import csv

filename = r"D:\download\test.csv"

with open(filename) as f:
    reader = csv.reader(f, delimiter=",")
    for row in reader:
        print(row)

Вывод:

['name', 'zip']
['First Bank', '12345']
['Jhonson, Brenson, Eriksson and brothers', '98765']

PS по умолчанию в качестве символа квотирования используется символ двойной кавычки ("), но можно использовать и другой. Для этого его необходимо указать явно:

csv.reader(..., quotechar="|")
→ Ссылка