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-为此,我在除
块中使用了继续
。谢谢