2011-11-29 59 views
22

我需要阅读它具有有一个逗号领域的CSV文件,所以我就用双引号包含逗号的领域,如:阅读CSV用逗号领域内的文件在Python

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

但是,当我尝试读取Python中的文件,我得到由逗号分隔的字段,如下:

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

我读了CSV与下面的代码:

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

是否可以读取包含逗号的双引号字段?

回答

30

Python csv模块实际上确实支持带引号的字段,即使在默认情况下。你的问题在于,Python默认情况下不会跳过这个空间,所以你需要使用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()嗅探(S).__ dict__'将表明它太: '{ '__doc__':无, '__module__': 'CSV', '_name':“闻' '分隔符':',', '双引号':虚假, 'lineterminator': '\ r \ N', 'quotechar': '“', '引用':0, 'skipinitialspace' :真}' – eumiro