无法使用引号中的转义字符解析CSV

时间:2017-04-05 01:32:27

标签: python csv parsing double-quotes reader

我有一系列格式错误的CSV,我在使用Python标准库中的CSV解析器解析它们时遇到了一些麻烦。从本质上讲,CSV不会转义返回字符,我得到一些我不理解的输出。

似乎解析器有时可以将正确的行组合在一起,但是正在丢弃或者不规则地添加。例如,在id = 1的条目中,将删除字符串中间的引号,但保留结尾的引号。类似的事情发生在最后一个条目(id = 3)。我希望在条目中删除最外面的引号,就像使用ID一样。

它也没有以我能找到的可预测的方式组合线条。 id = 2的条目被分成两个条目,我无法理解为什么其他两个条目保持不变但是这个条目被拆分的模式。

我不理解CSV的格式是否存在歧义,这使得除了未转义的返回字符之外难以解析。我试过各种格式的参数无济于事。任何清晰度都会非常感激。

为了澄清,我理解在解析CSV之前我可以进行字符串替换。我在问为什么输出看起来不规律。

代码:

import csv

with open('text.csv') as csv_file:
    for line in csv.reader(csv_file):
        print(line)

输入:

"id","text"
"1","This line here
More Text "quoted"
"2","This line here "quoted" More Text
More Text "quoted" More Text"
"3","This line here
"quoted"

输出:

['id', 'text', 'id2']
['97910', 'This line here\r\nMore Text quoted"', '1']
['97930', 'This line here quoted" More Text']
['More Text "quoted" More Text"', '2']
['97930', 'This line here\r\nquoted"', '3']

期望的输出:

['id', 'text', 'id2']
['97910', 'This line here\r\nMore Text "quoted', '1']
['97930', 'This line here "quoted" More Text\r\nMore Text "quoted" More Text', '2']
['97930', 'This line here\r\n"quoted', '3']

1 个答案:

答案 0 :(得分:0)

  

每个嵌入的双引号字符必须用a表示   一对双引号字符。

1997,Ford,E350,"Super, ""luxurious"" truck"
  

必须引用包含嵌入换行符的字段(但是,许多CSV   实现不支持嵌入式换行符。

1997,Ford,E350,"Go get one now
they are going fast"

因此,在解析csv文件或尝试通过转义双引号来编写csv文件之前,可以用双引号替换双引号。

文件的每一行都是数据记录。每个记录由一个或多个字段组成,用逗号分隔。但如果你使用双引号,它会找到相应的双引号,如果解析器找不到它,它将读取下一行直到得到一个双引号,然后,它无法找到逗号,以便它处理

的原因
"This line here
More Text "quoted"

只有一个归档,对于"2","This line here "quoted" More Text,同样的原因,解析器可以找到一对双引号,因此它将读取下一条记录。

查看Comma-separated values的更多详情。