我正在解析一个大小合适的 xml 文件,但遇到了问题。出于某种原因,即使我之前对不同的 xml 文件做了完全相同的事情,我也无法提取数据。
这是我的代码片段:(程序的其余部分,我已经测试过并且它们工作正常)编辑:更改为包含测试 try&except 块
def parseXML():
file = open(str(options.drugxml),'r')
data = file.read()
file.close()
dom = parseString(data)
druglist = dom.getElementsByTagName('drug')
with codecs.open(str(options.csvdata),'w','utf-8') as csvout, open('DrugTargetRel.csv','w') as dtout:
for entry in druglist:
count = count + 1
try:
drugtype = entry.attributes['type'].value
print count
except:
print count
print entry
drugidObj = entry.getElementsByTagName('drugbank-id')[0]
drugid = drugidObj.childNodes[0].nodeValue
drugnameObj = entry.getElementsByTagName('name')[0]
drugname = drugnameObj.childNodes[0].nodeValue
targetlist = entry.getElementsByTagName('target')
for target in targetlist:
targetid = target.attributes['partner'].value
dtout.write((','.join((drugid,targetid)))+'\n')
csvout.write((','.join((drugid,drugname,drugtype)))+'\n')
如果您想知道 XML 文件的架构大致是什么样子,这里有一个粗略的可怕的关卡草图:
<drugs>
<drug type='something' ...>
<drugbank-id>
<name>
...
<targets>
<target partner='something'>
我在这里输入的那些,我需要从 XML 文件中提取并将其粘贴到 csv 文件中(如上面的代码所示),并且该代码以前适用于不同的 xml 文件,不知道为什么它不适用于这个文件。我在'type'上得到了KeyError,即使每种药物都有一个drugid,我也得到了提取drugid的索引错误。我在这里搞砸什么?
编辑:我提取的东西保证在每种药物中都有。
对于任何关心的人,这里是我正在解析的 XML 文件的链接: http ://www.drugbank.ca/system/downloads/current/drugbank.xml.zip
编辑:在实现 try & except 块(见上文)后,我发现:在架构中,有一些称为“药物相互作用”的部分也有一个名为drug的子字段。所以像这样:
<drugs>
<drug type='something' ...>
<drugbank-id>
<name>
...
<targets>
<target partner='something'>
<drug-interactions>
<drug>
我认为我的行 druglist = dom.getElementsByTagName('drug') 也无意中捡起了这些——我不知道如何解决这个问题……有什么建议吗?