Как разобрать файл с разделителями табуляции, который может иметь значения в нескольких строках?

У меня есть файл, который имеет вкладку с разными точками данных:

"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 ответа

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

Ниже приведен пример выполнения http://codebunk.com/b/4095452/


При повторении по строкам у вас есть две возможности: в случае по умолчанию вы читаете новую запись, поэтому вам нужно просто обрабатывать ее, как и без многострочного. Другой случай - когда предыдущая строка не закончила запись, т.е. Когда она не закончилась цитатой. В этом случае вы все равно добавляете к предыдущей записи. Поэтому вам просто нужно следить за состоянием предыдущей записи, самой записи для анализа вашего файла.

Что-то вроде этого:

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('"')

licensed under cc by-sa 3.0 with attribution.