带有引号和逗号字符的CSV文件

时间:2012-02-10 23:02:59

标签: python csv quote

我有一堆我要解析的CSV文件 - 问题是有一半的引号用作引号,而主要字段中有逗号。它们实际上不是CSV,但它们确实具有可识别的固定数量的字段。方言= csv。“excel”设置完美地适用于文件中没有额外的“和,字段内的字符。”

此数据已旧/不受支持。我试图将一些生命投入其中。

e.g。

"AAAAA
AAAA
AAAA
AAAA","AAAAAAAA


AAAAAA
AAAAA "AAAAAA" AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAA, AAAAA
AAAAAAAAA AAAAA AAAAAAAAAA
AAAAA, "AAAAA", AAAAAAAAA
AAAAAAAA AAAAAAAA
AAAAAAA
"

这会使文件解析器跳闸,并抛出错误_csv.Error: newline inside string。我通过从第二个字段中删除引号来解决这个问题,并且csv.reader模块解析文件OK。

有些字段是多行的 - 我不确定这些是否重要。

我一直在寻找方言设置,虽然我可以找到'skipinitialspace',但这似乎并没有解决问题。

要清楚 - 这不是有效的'CSV',它的数据对象松散地遵循CSV结构,但是在字段测试中有“字符”。

lineterminator是\ x0d \ x0a

我已尝试过双重引用的不同permeations和方言模块中的引用变量,但我无法正确解析此解析。

我无法确信a,“或”组合仅存在于场边界上。

此问题仅存在于文件中的几个字段中的一个(最后一个),并且有几千个文件。

3 个答案:

答案 0 :(得分:11)

您是否尝试通过quoting关键字arg传递csv.QUOTE_NONE?如果没有一些代码或数据来测试它,我无法知道这是否真的对您的数据有效,但它似乎与您提供的片段一起使用。

>>> import csv
>>> r = csv.reader(open('foo.csv', 'rb'), quoting=csv.QUOTE_NONE)
>>> for row in r: print row
... 
['"A"', '"B"', '"ccc "ccccccc" cccccc"']

答案 1 :(得分:3)

我还不能发表评论,所以我会发帖回答......

假设您使用逗号作为分隔符,数据中是否有逗号?如果没有,那么你可以进行大量的查找和替换,以便在CSV处理之前的字段的第一个字符和最后一个字符之前加倍所有引号字符。

答案 2 :(得分:2)

我会编写一个转换器来解析初始csv并输出一个有效的转换器。您可以使用“,或”\ n作为确定分隔符的机制。