如何使用带引号的字符串解析csv - 高级案例

问题描述 投票:2回答:2

我正在尝试使用csv模块来解析包含引用字符串和引用分隔符的行。不幸的是,我无法用任何方言/格式参数达到预期的效果。有没有办法解析这个:

'"AAA", BBB, "CCC, CCC"'

得到这个:

['"AAA"', 'BBB', '"CCC, CCC"']    # 3 elements, one quoted separator

?

两个基本要求:

  1. 报价必须保留
  2. 引号,而不是转义分隔符必须复制为常规字符

可能吗?

python python-3.x csv
2个回答
3
投票

有两个问题需要克服:

  • 逗号分隔符周围的空格:skipinitialspace=True完成这项工作
  • 在阅读时保留引用:用三倍引号替换引号允许保留引号

第二部分在文档中描述为:

Dialect.doublequote

控制如何引用字段中出现的quotechar实例。如果为True,则角色加倍。如果为False,则escapechar将用作quotechar的前缀。它默认为True。

独立示例,没有文件:

import csv
data = ['"AAA", BBB, "CCC, CCC"'.replace('"','"""')]

cr = csv.reader(data,skipinitialspace=True)
row = next(cr)
print(row)

结果:

['"AAA"', 'BBB', '"CCC, CCC"']

使用文件作为输入:

import csv
with open("input.csv") as f:
  cr = csv.reader((l.replace('"','"""' for l in f),skipinitialspace=True)
  for row in cr:
     print(row)

0
投票

你试过这个吗?

import csv
with open('file.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in reader:
        print row
© www.soinside.com 2019 - 2024. All rights reserved.