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

33 投票
2 回答
35666 浏览
提问于 2025-04-17 07:18

我需要读取一个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 个回答

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"]
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']]

撰写回答