为什么Python CSV阅读器会忽略双引号字段?

为什么Python CSV阅读器会忽略双引号字段?,python,csv,Python,Csv,我想这可能很简单,但经过一个小时的搜索,我没有找到我做错了什么 我正在使用以下代码读取CSV文件-读取该文件没有问题,但是当一行包含双引号字段(因为它包含分隔符)时,CSV读取器将忽略双引号并将该字段解析为两个单独的字段 以下是我使用的代码: myReader = csv.reader(open(inPath, 'r'), dialect='excel', delimiter=',', quotechar='"') for row in myReader: print row,

我想这可能很简单,但经过一个小时的搜索,我没有找到我做错了什么

我正在使用以下代码读取CSV文件-读取该文件没有问题,但是当一行包含双引号字段(因为它包含分隔符)时,CSV读取器将忽略双引号并将该字段解析为两个单独的字段

以下是我使用的代码:

myReader = csv.reader(open(inPath, 'r'), dialect='excel', delimiter=',', quotechar='"')
for row in myReader:
    print row,
    print len(row)
我的意见:

hello, this is row 1, foo1
hello, this is row 2, foo2
goodbye, "this, is row 3", foo3
这给了我:

['hello', ' this is row 1', ' foo1'] 3
['hello', ' this is row 2', ' foo2'] 3
['goodbye', ' "this', ' is row 3"', ' foo3'] 4
我需要更改什么,以便它将双引号字段识别为一个字段? 我使用的是python版本2.6.1


谢谢

这是因为您的csv在引号之前有空格:

one0, one1, one2
two0, two1, two2
tre0, "tr,e1", tre2
vs


您需要先删除这些多余的空格。

如果查看您使用的方言,您会注意到excel方言是 配置如下:

class excel(Dialect):
    """Describe the usual properties of Excel-generated CSV files."""
    delimiter = ','
    quotechar = '"'
    doublequote = True
    skipinitialspace = False
    lineterminator = '\r\n'
    quoting = QUOTE_MINIMAL
请注意,
skipinitialspace
设置为False。把它传给你的读者。 哦,顺便说一句,您传入的所有字段在 使用
excel
方言,这是传递给的默认方言参数

因此,我将重新编写您的代码,如下所示:

>>> with open(inPath) as fp:
>>>     reader = csv.reader(fp, skipinitialspace=True)
>>>     for row in reader:
>>>         print row,
>>>         print len(row)
['hello', 'this is row 1', 'foo1'] 3
['hello', 'this is row 2', 'foo2'] 3
['goodbye', 'this, is row 3', 'foo3'] 3

这是错误的:
csv.reader()
skipinitialspace
选项来处理这些空白。
>>> with open(inPath) as fp:
>>>     reader = csv.reader(fp, skipinitialspace=True)
>>>     for row in reader:
>>>         print row,
>>>         print len(row)
['hello', 'this is row 1', 'foo1'] 3
['hello', 'this is row 2', 'foo2'] 3
['goodbye', 'this, is row 3', 'foo3'] 3