По причинам, которых я действительно не понимаю, REST API, который я использую, вместо вывода JSON или XML использует особый структурированный текстовый формат. В простейшей форме
SECTION_NAME entry other qualifying bits of the entry
entry2 other qualifying bits
...
Они не разделены табуляцией -, как может показаться в структуре, а разделены пробелом -, а уточняющие биты могут содержать слова с пробелами. Пробел между РАЗДЕЛОМ _ИМЯ и записями также может быть разным: от 1 до нескольких (6 и более )пробелов.
Также одна часть формата содержит записи вида
SECTION_NAME entry
SUB_SECTION more information
SUB_SECTION2 more information
Для справки, выдержка из реальных данных (некоторые разделы опущены ), что показывает использование структуры:
ENTRY hsa04064 Pathway
NAME NF-kappa B signaling pathway - Homo sapiens (human)
DRUG D09347 Fostamatinib (USAN)
D09348 Fostamatinib disodium (USAN)
D09692 Veliparib (USAN/INN)
D09730 Olaparib (JAN/INN)
D09913 Iniparib (USAN/INN)
REFERENCE PMID:21772278
AUTHORS Oeckinghaus A, Hayden MS, Ghosh S
TITLE Crosstalk in NF-kappaB signaling pathways.
JOURNAL Nat Immunol 12:695-708 (2011)
Пока я пытаюсь преобразовать этот странный формат во что-то более разумное (словарь, который затем можно преобразовать в JSON ), я не знаю, что делать :слепое разбиение по пробелам приводит к беспорядку (это также влияет на информацию с пробелами ), и я не уверен, как понять, когда начинается раздел или нет. Достаточно ли манипуляций с текстом для этой работы или мне следует использовать более сложные методы?
РЕДАКТИРОВАТЬ:
Я начал использовать pyparsing для работы, но несколько строк -сбивают меня с толку, вот пример с DRUG:
from pyparsing import *
punctuation = ",.'`&-"
special_chars = "\()[]"
drug = Keyword("DRUG")
drug_content = Word(alphanums) + originalTextFor(OneOrMore(Word(
alphanums + special_chars))) + ZeroOrMore(LineEnd())
drug_lines = OneOrMore(drug_content)
drug_parser = drug + drug_lines
При применении к первым трем строкам DRUG в примере я получаю неверный результат (\n преобразуется в фактические результаты для облегчения чтения):
['DRUG', ['D09347', 'Fostamatinib (USAN)
D09348 Fostamatinib disodium (USAN)
D09692 Veliparib (USAN']]
Как видите, все последующие записи свалены в одну кучу, хотя я ожидал, что:
['DRUG', [['D09347', 'Fostamatinib (USAN)'], ["D09348", "Fostamatinib disodium (USAN)"],
['D09692', ' Veliparib (USAN)']]]