Почему при вызове 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 шт):
Подозреваю, что у вас сломанный/некорректный 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="|")