適切なサイズの 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 ファイルで機能していましたが、なぜこのファイルで機能しないのかわかりません。「タイプ」で KeyError が発生しました。また、すべてのドラッグにドラッグ ID があるにもかかわらず、ドラッグ ID を抽出する行でインデックス作成エラーが発生しました。私はここで何を台無しにしていますか?
編集:私が抽出しているものは、各薬物に含まれていることが保証されています.
気になる人のために、私が解析している XML ファイルへのリンクを次に示します: http://www.drugbank.ca/system/downloads/current/drugbank.xml.zip
編集: try & except ブロック (上記を参照) を実装した後、私が見つけたものは次のとおりです。このように:
<drugs>
<drug type='something' ...>
<drugbank-id>
<name>
...
<targets>
<target partner='something'>
<drug-interactions>
<drug>
私の行 druglist = dom.getElementsByTagName('drug') も意図せずにそれらを拾っていると思います-これを修正する方法がわかりません...何か提案はありますか?