Python analiza CSV ignorando la coma con comillas dobles

Resuelto Abhi asked hace 10 años • 3 respuestas

Tengo un archivo CSV con líneas como esta:

"AAA", "BBB", "Test, Test", "CCC"
"111", "222, 333", "XXX", "YYY, ZZZ" 

etcétera ...

No quiero analizar comas entre comillas dobles. es decir. Mi resultado esperado debería ser

AAA
BBB
Test, Test
CCC

Mi código:

import csv
with open('values.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print row

Intenté usar el paquete csv en Python pero no tuve suerte. Los análisis explotan todas las comas.

Por favor, avíseme si me falta algo.

Abhi avatar Feb 03 '14 19:02 Abhi
Aceptado

Esto debería hacer:

lines = '''"AAA", "BBB", "Test, Test", "CCC"
           "111", "222, 333", "XXX", "YYY, ZZZ"'''.splitlines()
for l in  csv.reader(lines, quotechar='"', delimiter=',',
                     quoting=csv.QUOTE_ALL, skipinitialspace=True):
    print l
>>> ['AAA', 'BBB', 'Test, Test', 'CCC']
>>> ['111', '222, 333', 'XXX', 'YYY, ZZZ']
Michael avatar Feb 03 '2014 12:02 Michael

Tiene espacios antes de las comillas en su entrada. Configúrelo skipinitialspaceparaTrue omitir cualquier espacio en blanco después de un delimitador:

Cuando se ignora Trueel espacio en blanco que sigue inmediatamente al delimitador . El valor predeterminado es False.

>>> import csv
>>> lines = '''\
... "AAA", "BBB", "Test, Test", "CCC"
... "111", "222, 333", "XXX", "YYY, ZZZ" 
... '''
>>> reader = csv.reader(lines.splitlines())
>>> next(reader)
['AAA', ' "BBB"', ' "Test', ' Test"', ' "CCC"']
>>> reader = csv.reader(lines.splitlines(), skipinitialspace=True)
>>> next(reader)
['AAA', 'BBB', 'Test, Test', 'CCC']
Martijn Pieters avatar Feb 03 '2014 12:02 Martijn Pieters