使用Python解析双重分隔文件

时间:2016-06-09 00:14:38

标签: python python-2.7 parsing

我正在使用Python解析逗号分隔的文件,其中一些文本字段用引号双重分隔,因为文本包含非分隔逗号。例如,给定这一行输入:

field_1,field_2,...,"this,field,contains,non-delimiting,commas",...,field_n

我需要将"this,field,contains,non-delimiting,commas"视为包含讨厌逗号的单引号分隔字段。

我的代码通过比较每行输入中所有逗号和引号的索引并在成对引号之外的所有逗号的索引处切换行来处理此事。

然而,这让我觉得不像Pythonic,而且我希望得到一些可以获得更多Pythonic解决方案的建议。

2 个答案:

答案 0 :(得分:3)

这是the csv module使用csv.QUOTE_MINIMAL quoting直接处理的内容(作为excel方言的一部分,可能是其他方言)。

csv.reader与适当的标记一起使用,请不要自行解析。

答案 1 :(得分:0)

您可以使用相当简单的generator来完成此任务。

def tokenize(input):
    outstr = ""
    stringmode = False
    for char in input:
        if char  == "," and not stringmode:
            yield outstr
            outstr = ""
            continue
        elif char == "'" or char == '"':
            stringmode = not stringmode
        outstr += char

首先,我们将输入转换为自身的反转列表,以便我们可以有效地从字符串的前面弹出字符。然后我们简单地循环遍历字符串,当我们到达逗号并且不在引号中时产生,并在每次我们到达报价时切换是否在引用中