我有一个XML文件,如下所示:
<Organism>
<Name>Bacillus halodurans C-125</Name>
<Enzyme>M.BhaII</Enzyme>
<Motif>GGCC</Motif>
<Enzyme>M1.BhaI</Enzyme>
<Motif>GCATC</Motif>
<Enzyme>M2.BhaI</Enzyme>
<Motif>GCATC</Motif>
</Organism>
<Organism>
<Name>Bacteroides eggerthii 1_2_48FAA</Name>
</Organism>我试图把它写到这样的CSV文件中:
Bacillus halodurans, GGCC
Bacillus halodurans, GCATC
Bacillus halodurans, GCATC
Bacteriodes, 我处理这个问题的方法是创建一个元组列表,将organism name和motif放在一起。我使用ElementTree模块尝试了这一点:
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
rebase = tree.getroot()
list = []
for organisms in rebase.findall('Organism'):
name = organisms.find('Name').text
for each_organism in organisms.findall('Motif'):
try:
motif = organisms.find('Motif').text
print name, motif
except AttributeError:
print name但是,我得到的输出如下所示:
Bacillus halodurans, GGCC
Bacillus halodurans, GGCC
Bacillus halodurans, GGCC只有第一个motif被记录下来。这是我第一次使用ElementTree,所以这有点让人困惑。任何帮助都将不胜感激。
我不需要帮助编写一个CSV文件。
发布于 2014-09-27 20:18:12
唯一需要修复的是替换:
motif = organisms.find('Motif').text通过以下方式:
motif = each_organism.text您已经在迭代一个Motif中的Organism节点。each_organism循环变量持有Motif标记的值。
我还会更改变量名以避免混淆。而且,我不认为在循环中需要try/except而不是Motif标记。如果可能缺少name标记,您可以遵循“请求原谅,而不是许可”的方法,并捕获错误:
for organism in rebase.findall('Organism'):
try:
name = organism.find('Name').text
except AttributeError:
continue
for motif in organism.findall('Motif'):
motif = motif.text
print name, motifhttps://stackoverflow.com/questions/26078806
复制相似问题