由于某些原因,我正在使用的REST API并不输出JSON或XML,而是使用一种特殊的结构化文本格式。在其最简单的形式下,它长这样:
当我试图将这种奇怪的格式解析成更合理的东西(一个可以转换为JSON的字典),我不确定该怎么做:盲目地按空格分割会导致混乱(它还会影响带有空格的信息),而且我不确定如何确定一个部分何时开始或结束。文本操作是否足够完成任务,还是应该使用更复杂的方法?
编辑:
我开始使用pyparsing进行处理,但多行记录使我困惑,以下是DRUG的示例:
如您所见,随后的条目会全部合并在一起,而我原本的期望是:
SECTION_NAME entry other qualifying bits of the entry
entry2 other qualifying bits
...
它们看起来并不是制表符分隔的,而是空格分隔的,限定位可能包含带有空格的单词。SECTION_NAME和条目之间的间距也是可变的,范围从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的前3行时,我得到了错误的结果(\n转换为实际返回以便易读性):
['DRUG', ['D09347', 'Fostamatinib (USAN)
D09348 Fostamatinib disodium (USAN)
D09692 Veliparib (USAN']]
如您所见,随后的条目会全部合并在一起,而我原本的期望是:
['DRUG', [['D09347', 'Fostamatinib (USAN)'], ["D09348", "Fostamatinib disodium (USAN)"],
['D09692', ' Veliparib (USAN)']]]
re.split
会是一个更好的选择。 - inspectorG4dget