如何解析可能跨多行的制表符分隔文件?
我有一个用制表符分隔的文件,里面有不同的数据点:
"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/