2017-04-05 60 views
1

我有一系列格式错误的csv,并且在使用python标准库中的csv解析器解析它们时遇到了一些麻烦。从本质上讲,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'] 

回答

0

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

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

领域具有嵌入式换行符必须用引号(然而,许多CSV 实现不支持嵌入式换行符)。

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

所以,你可以用2个引号代替双引号,解析csv文件或尝试转义双引号时写的csv文件之前。


该文件的每一行都是数据记录。每条记录包含一个或多个以逗号分隔的字段。但是,如果你使用双引号,它会找到相应的双引号,如果解析器找不到它,它将读取下一行,直到得到双引号,然后,它找不到逗号,这就是为什么它治疗

"This line here 
More Text "quoted" 

因为只有一个申请,为"2","This line here "quoted" More Text,由于同样的原因,解析器可以找到一对双引号的,所以它会读取下一个记录。

Comma-separated values查看更多详情。

+0

对,我明白我更严格的csv会是什么样子。我更多问为什么一个人被分解成碎片而其他人不是。 –

+0

@QuintonRobbins我更新了我的答案。 – McGrady

+0

您是否暗示我认为正确的行只是偶尔被解析器拾取,因为引号的具体组合并且实际上它们中没有一个正在以“正确”方式解析? –