使用Python读取包含逗号的字段的CSV文件

32

我需要读取一个包含逗号的CSV文件,所以我对包含逗号的字段使用了双引号进行了转义,例如:

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] ...

如何读取包含逗号的双引号字段?

2个回答

45

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().sniff(s).__dict__ дєЯеПѓдї•жШЊз§Їе¶ВдЄЛзїУжЮЬпЉЪ {'__doc__': None, '__module__': 'csv', '_name': 'sniffed', 'delimiter': ',', 'doublequote': False, 'lineterminator': '\r\n', 'quotechar': '"', 'quoting': 0, 'skipinitialspace': True} - eumiro
不知道怎么做,但你应该因为这个答案得到报酬.. :D 感谢Sven Marnach,这刚好解决了我的问题.. 上帝保佑你。 - Assad Ali
1
@AssadAli 谢谢你的赞美之词。我很高兴这个答案能够帮到你。 - Sven Marnach

1

您需要在文件内容上使用DictReader

结果看起来像这样

import csv

with open(file_name, mode ='r', encoding='utf-8') as file:
  # reading the CSV file
  csvFile = csv.DictReader(file)
  # displaying the contents of the CSV file
  for line in csvFile:
    print(line["myAttribute"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接