2011-11-29 9 views
22

ho bisogno di leggere un file CSV, che ha campi che hanno una virgola, così ho letto citato i campi che contiene le virgole, come ad esempio:leggere il file CSV con virgole all'interno dei campi in Python

1, "text1,text2", "text3, text4", a, b, c 

Ma quando cerco di leggere il file in Python mi vengono i campi separati da virgole, come segue:

row[0] = 1 
row[1] = text1 
row[2] = text2 
row[3] = text3 
row[4] = text4 
row[5] = a 
row[6] = b 
row[7] = c 

sto leggendo il file CSV con il seguente codice:

info = csv.reader(open('./info.csv')) 
for row in info : 
    print row[0] + " * " + row[1] ... 

E 'possibile leggere campi con doppie virgolette che contengono una virgola?

risposta

30

Il modulo Python csv supporta effettivamente i campi citati, anche per impostazione predefinita. Il tuo problema qui è che Python di default non salta lo spazio, quindi devi usare skipinitialspace=True. .

>>> s = StringIO.StringIO('1, "text1,text2", "text3, text4", a, b, c') 
>>> list(csv.reader(s, skipinitialspace=True)) 
[['1', 'text1,text2', 'text3, text4', 'a', 'b', 'c']] 
+5

'csv.Sniffer() sniff (s) .__ dict__' indicherebbero troppo: ' { '__doc__': None, '__module__': 'csv', '_name': 'annusato ' 'delimitatore':', ', 'doublequote': Falso, 'lineterminator': '\ r \ n', 'quotechar': '"', 'citando': 0, 'skipinitialspace' : Vero} ' – eumiro

Problemi correlati