csv.reader错误地解析文件

时间:2014-10-01 01:11:35

标签: python csv

我有一个带有6个相同行的制表符分隔文件(可以下载测试文件here):

2635243 Uckfield    Uckfield    "kfijld,Ъкфийлд 50.96948    0.09589 P   PPL GB      ENG E2  21UH        15716       19  Europe/London   2010-05-24
2635243 Uckfield    Uckfield    "kfijld,Ъкфийлд 50.96948    0.09589 P   PPL GB      ENG E2  21UH        15716       19  Europe/London   2010-05-24
2635243 Uckfield    Uckfield    "kfijld,Ъкфийлд 50.96948    0.09589 P   PPL GB      ENG E2  21UH        15716       19  Europe/London   2010-05-24
2635243 Uckfield    Uckfield    "kfijld,Ъкфийлд 50.96948    0.09589 P   PPL GB      ENG E2  21UH        15716       19  Europe/London   2010-05-24
2635243 Uckfield    Uckfield    "kfijld,Ъкфийлд 50.96948    0.09589 P   PPL GB      ENG E2  21UH        15716       19  Europe/London   2010-05-24
2635243 Uckfield    Uckfield    "kfijld,Ъкфийлд 50.96948    0.09589 P   PPL GB      ENG E2  21UH        15716       19  Europe/London   2010-05-24

当我尝试用csv.reader读取它们时,我只能正确解析3行:

>>> import csv    
>>> len(list(csv.reader(open('test.txt', 'rb'), delimiter='\t')))
3

为什么会这样?

编辑:进一步测试表明只解析偶数行(第一,第三和第五)。可能是一些EOL问题?

1 个答案:

答案 0 :(得分:3)

你应该禁用引用,它会起作用:

len(list(csv.reader(open('test.txt', 'rb'), delimiter='\t', quoting=csv.QUOTE_NONE)))

将返回 6

此处的问题是,CSV解析器会将新行字符\n作为字段的一部分,因为在"之前的每一行中都有默认引号kfijld