【问题标题】:Problem due to double quote while parsing csv.解析 csv 时由于双引号引起的问题。
【发布时间】:2011-09-07 13:34:44
【问题描述】:

我有以下格式的 csv 文件,

"1";"A";"A:"61 B & BA";"C"

以下是我读取 csv 文件的代码,

with open(path, 'rb') as f:
    reader = csv.reader(f, delimiter = ';', quotechar = '"')
    for row in reader:
        print row

问题是,它在 5 个字段中分行,

['1', 'A', 'A:61 B &amp', ' BA', 'C']

而我期待我的输出是,

['1', 'A', 'A:61 B & BA', 'C']

当我在 csv 文件中删除 61 B 之前的双引号时,我得到的输出为,

['1', 'A', 'A:61 B & BA', 'C'] 很好,但是为什么即使定义了分隔符和引号字符,字段中间的双引号也会导致问题?

【问题讨论】:

  • 如果不指定引号字符会怎样?
  • 如果不指定引号字符,我得到的结果是 , ['1', 'A', 'A:61 B &amp', 'BA"', 'C'],所以它仍然打破了这个领域。

标签: python csv


【解决方案1】:

您的 csv 文件无效。如果引号出现在(带引号的)字符串中,则必须通过将其加倍来对其进行转义。

"1";"A";"A:""61 B & BA";"C"

会导致

['1', 'A', 'A:"61 B & BA', 'C']

CSV 模块应该如何猜测分隔项目的引号和项目内的引号之间的差异?

【讨论】:

    【解决方案2】:

    我怀疑双引号应该替换为 ".

    【讨论】:

      【解决方案3】:

      您定义了一个在文本中使用的分隔符:与号实体有一个分号。我建议将您的分隔符更改为不会出现在文本中的内容。 (如管道字符或其他东西。)

      【讨论】:

        猜你喜欢
        • 2014-03-27
        • 1970-01-01
        • 1970-01-01
        • 2017-11-18
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 2018-05-13
        相关资源
        最近更新 更多