首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将XML文件转换为CSV

将XML文件转换为CSV
EN

Stack Overflow用户
提问于 2014-09-27 20:14:34
回答 1查看 211关注 0票数 1

我有一个XML文件,如下所示:

代码语言:javascript
复制
<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文件中:

代码语言:javascript
复制
Bacillus halodurans, GGCC
Bacillus halodurans, GCATC
Bacillus halodurans, GCATC
Bacteriodes, 

我处理这个问题的方法是创建一个元组列表,将organism namemotif放在一起。我使用ElementTree模块尝试了这一点:

代码语言:javascript
复制
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

但是,我得到的输出如下所示:

代码语言:javascript
复制
Bacillus halodurans, GGCC
Bacillus halodurans, GGCC
Bacillus halodurans, GGCC

只有第一个motif被记录下来。这是我第一次使用ElementTree,所以这有点让人困惑。任何帮助都将不胜感激。

我不需要帮助编写一个CSV文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-27 20:18:12

唯一需要修复的是替换:

代码语言:javascript
复制
motif = organisms.find('Motif').text

通过以下方式:

代码语言:javascript
复制
motif = each_organism.text

您已经在迭代一个Motif中的Organism节点。each_organism循环变量持有Motif标记的值。

我还会更改变量名以避免混淆。而且,我不认为在循环中需要try/except而不是Motif标记。如果可能缺少name标记,您可以遵循“请求原谅,而不是许可”的方法,并捕获错误:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26078806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档