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

3 投票
2 回答
991 浏览
提问于 2025-04-18 16:10

我有一个用制表符分隔的文件,里面有不同的数据点:

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

我可以很简单地用内置的字符串函数 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 个回答

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('"')
6
import csv
r=csv.reader(open("a.tsv"), delimiter="\t", quotechar='"')
print r.next()

这里有一个可以运行的示例,点击这个链接可以查看:http://codebunk.com/b/4095452/

撰写回答