def csv_split() :
raw = [
'"1,2,3" , "4,5,6" , "456,789"',
'"text":"a,b,c,d", "gate":"456,789"'
]
cr = csv.reader(raw, skipinitialspace=True)
for l in cr :
print len(l), l
Эта функция выходов следующие:CSV файл с цитируемой запятой не может быть корректно разделить на Python
3 ['1,2,3 ', '4,5,6 ', '456,789']
6 ['text:"a', 'b', 'c', 'd"', 'gate:"456', '789"']
Как вы можете сказать, первая линия правильно разделена на 3 записей. Но вторая строка НЕ. Я бы ожидал, что считыватель csv разделит его на на два, вместо этого у нас здесь 6. Я также думал о подходах regex , но он предполагает некоторый конкретный цитирующий диалект.
В принципе, я хочу: просто разделил строку всякий раз, когда есть «,», который не котируется в паре из «».
Есть ли какой-нибудь быстрый и общий способ для этого? Я видел некоторые хаки regex, которые предполагает, что все поданные ВСЕГДА цитируются и т. Д. Я думаю, что могу написать небольшую петлю , которая делает это очень неэффективно, но, безусловно, оценю еще экспертный совет. Большое спасибо!
Это правильно разделив его. Данные CSV неверно отформатированы. Как вы думаете, что это должно быть разделено? –
Вы должны сказать, что вы действительно хотите для второй линии, потому что я не могу понять, о чем вы просите. – Gabe
@Gabe Я думаю, что OP ожидал '' "text": "a, b, c, d" и '" gate ":" 456,789 "'' - OP, пожалуйста, исправьте меня, если я неправильно понял. – Levon