我有一个用不同数据点分隔的标签文件:
"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'}]
答案 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('"')