我认为这可能很简单,但经过一个小时的搜索后,我还是没能弄清楚我做错了什么。
我正在使用以下代码读取 CSV 文件 - 我读取该文件没有问题,但是当一行包含一个因包含定界符而被双引号括起来的字段时,CSV 阅读器会忽略双引号并将该字段解析为 2 个单独的字段。
这是我使用的代码:
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。
谢谢!
最佳答案
如果您查看正在使用的方言,您会注意到 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
方言,这是传递给 csv.reader 的默认方言参数
所以,我会像这样重写你的代码:
>>> 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
关于python - 为什么 Python CSV 阅读器会忽略双引号字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6879596/