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

标签 python csv

我认为这可能很简单,但经过一个小时的搜索后,我还是没能弄清楚我做错了什么。

我正在使用以下代码读取 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/

相关文章:

python - Django 表单测试生成带有外键模型字段的错误

python - 使用 stdout 时的交互式用户输入

python - 打开上传的 CSV 文件时出现类型错误

javascript - 从 API 结果导出 CSV 在 Firefox JavaScript 上不起作用

python - pip 下载而不执行 setup.py

python - 在进程运行时不断打印子进程输出

python - Python 中的正则表达式 : not able to match repeated group numbers

java - Amazon S3 选择问题 : not supporting line break occurring inside fields

python - 用同一字符串中的单个单词替换字符串的一部分

bash - append 到 Bash 中的同一行