如何解析可能具有多行值的制表符分隔文件?

时间:2014-08-06 00:16:16

标签: python parsing multiline

我有一个用不同数据点分隔的标签文件:

"ID"    "Value"
"1" "This is a value"

我可以通过简单地使用内置的str函数split轻松地从中提取数据。但有时候我会碰到这个:

"ID"    "Value"
"1" "This is a value"
"2" "This is another
value"
"3" "Just one more"

第二个值跨越多行。如何捕获每个数据点的完整性?

最终我想要的是一个像这样的词典列表:

[{'ID':'1', 'Value':'This is a value'}, {'ID':'2', 'Value':'This is another\nvalue'}, {'ID':'3', 'Value':'Just one more'}]

2 个答案:

答案 0 :(得分:6)

import csv
r=csv.reader(open("a.tsv"), delimiter="\t", quotechar='"')
print r.next()

这是一个可运行的示例http://codebunk.com/b/4095452/

答案 1 :(得分:1)

当迭代这些行时,你有两种可能:在默认情况下,你正在读一条新记录,所以你应该像没有多行情况那样处理它。另一种情况是上一个行没有结束记录,即它没有以引号结束。在这种情况下,您仍然添加到以前的记录。因此,您只需跟踪记录本身的前一条记录的状态即可解析文件。

这样的事情:

isNew = True
records = []
for line in file:
    if isNew:
        records.append(line.strip().split('\t'))
    else:
        records[-1][-1] += '\n' + line
    isNew = records[-1][-1].endswith('"')