Я пытаюсь решить эту проблему. Я читаю данные из csv fiile, который имеет следующие столбцы:
id, name, price
Поэтому я использую следующий код для чтения csv:
import sys
import csv as input
def readFile(path):
try:
finput = input.reader(open(path,'rb'),delimiter=',',quotechar='|')
except IOError as (errno,strerror):
print "I/O error({0}): {1}".format(errno,strerror)
except:
print "Unexpected Error: ",sys.exc_info()[0]
raise
# covert format into list
fmod = list(finput)
return fmod
но проблема в том, что поле имени может быть похоже
name, item_det теперь, что "," создает для меня проблему.. вместо чтения поля имени как единого объекта, имеющего запятую в описании. он разделяет это конкретное поле. Как я могу это решить. благодаря
CSV - это то, что: "Comma Separated". Вам нужно указать поле имени:
|name,item_det|
Или используйте escape-символ, но вам нужно включить его, установив для него значение QUOTE_NONE:
reader = csv.reader(open(path, "rb"), delimiter=',', quoting=csv.QUOTE_NONE, escapechar="\\")
Пример:
name\,item_det
В противном случае не используйте модуль csv.
Просто убедитесь, что любые одиночные значения, содержащие ваш разделитель char (,
), заключены в quotechar
(|
в вашем примере). Таким образом, в любое время, когда поле name
в строке имеет вид <name>, <item_det>
строка должна читать что-то вроде ... ,|<name>, <item_det>|,...
|name, item_det|, other_field, another_field
(поскольку вы устанавливаетеquotechar='|'
). Модуль CSV может справиться с этим. Если нет, вы, вероятно, захотите сделать, как сказал @MartinBeckett, и проанализировать его вручную, или проверить длину списка и объединить эти два поля вручную, если это необходимо.