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

时间:2018-03-05 18:53:03

标签: python python-3.x csv

我试图让csv模块解析包含带引号的字符串和带引号的分隔符的行。遗憾的是,我无法使用任何方言/格式参数获得所需的结果。有没有办法解析这个:

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

得到这个:

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

两个基本要求:

  1. 必须保留报价
  2. 引用且未转义的分隔符必须复制为常规字符
  3. 有可能吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

你试过这个吗?

import csv
with open('file.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in reader:
        print row