Python 将XML文件转换为CSV

Python 将XML文件转换为CSV,python,xml,csv,Python,Xml,Csv,我有一个XML文件,如下所示: <Organism> <Name>Bacillus halodurans C-125</Name> <Enzyme>M.BhaII</Enzyme> <Motif>GGCC</Motif> <Enzyme>M1.BhaI</Enzyme> <Motif>GCATC</Motif> <Enzyme>

我有一个
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>
Bacillus halodurans, GGCC
Bacillus halodurans, GCATC
Bacillus halodurans, GCATC
Bacteriodes, 
Bacillus halodurans, GGCC
Bacillus halodurans, GGCC
Bacillus halodurans, GGCC
我实现这一点的方法是创建一个元组列表,其中包含
生物体名称
主题
。我使用
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
但是,我得到的输出如下所示:

<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>
Bacillus halodurans, GGCC
Bacillus halodurans, GCATC
Bacillus halodurans, GCATC
Bacteriodes, 
Bacillus halodurans, GGCC
Bacillus halodurans, GGCC
Bacillus halodurans, GGCC
只有第一个
motif
被记录。这是我第一次使用
ElementTree
,所以有点让人困惑。任何帮助都将不胜感激


在写入
CSV
文件时,我不需要任何帮助。

您需要解决的唯一问题是替换:

motif = organisms.find('Motif').text
与:

您已经在
生物体内的
Motif
节点中进行迭代
每个_生物体
循环变量都持有一个
模体
标记的值


我还将更改变量名以避免混淆。此外,我认为在
Motif
标记上的循环中不需要
try/except
。如果
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, motif

工作起来很有魅力。但是,在文件中的某些点上,
有机体
标记下只有一个
名称
标记。在这种情况下,我得到的错误是,
AttributeError:'NoneType'对象在
name=Organics.find('name')行没有属性“text”
。text
@初学者好的,我已经更新了答案。据我所知,您想跳过没有名字的
有机体
s-为此,我在
块中使用了
继续
。谢谢