bigben446 2022-03-05 19:19 采纳率: 85.7%
浏览 81
已结题

shell或者python脚本提取xml文件中信息

有一个xml文本test.xml,里面的主要信息内容是Hit,提取Hit信息中的两个tag内容,组成新的结果res.txt。希望脚本运行是这样的:bash xml-info.sh test.xml,或者python xml-info.py test.xml,自动生成res.txt结果。

hit信息基本组成单位,要想利用shell脚本或者python脚本提取xml文件里面的两个信息,Hit_accession和Hsp_hseq:

<Hit>
  <Hit_num>1</Hit_num>
  <Hit_id>gnl|SRA|SRR6675308.2504034.2</Hit_id>
  <Hit_def>2504034</Hit_def>
  <Hit_accession>SRR6675308.2504034.2</Hit_accession>
      <Hsp_align-len>50</Hsp_align-len>
      <Hsp_qseq>GFRKLPMGVGLSPFLLAQFTSSLASMVRRNFPHCMVFAYMDDVVLGAKSV</Hsp_qseq>
      <Hsp_hseq>GFRKIPMGVGLSPFLLAQFTSAICSVVRRAFPHCLAFSYMDDVVLGAKSV</Hsp_hseq>
      <Hsp_midline>GFRK+PMGVGLSPFLLAQFTS++ S+VRR FPHC+ F+YMDDVVLGAKSV</Hsp_midline>
    </Hsp>
  </Hit_hsps>
</Hit>

输出成为res.txt,格式如下,第一行Hit_accession,以>开头(不知道为啥帖子里面显示不出来,用“>”代替),第二行Hsp_hseq,直接是Hsp_hseq内容
“>”SRR6675308.2504034.2
GFRKIPMGVGLSPFLLAQFTSAICSVVRRAFPHCLAFSYMDDVVLGAKSV

测试文件test.xml

<?xml version="1.0"?>
<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd">
    </Parameters>
  </BlastOutput_param>
<BlastOutput_iterations>
<Iteration>
  <Iteration_iter-num>1</Iteration_iter-num>
  <Iteration_query-len>838</Iteration_query-len>
<Iteration_hits>
<Hit>
  <Hit_num>1</Hit_num>
  <Hit_id>gnl|SRA|SRR6675308.2504034.2</Hit_id>
  <Hit_def>2504034</Hit_def>
  <Hit_accession>SRR6675308.2504034.2</Hit_accession>
  <Hit_len>150</Hit_len>
  <Hit_hsps>
    <Hsp>
      <Hsp_gaps>0</Hsp_gaps>
      <Hsp_align-len>50</Hsp_align-len>
      <Hsp_qseq>GFRKLPMGVGLSPFLLAQFTSSLASMVRRNFPHCMVFAYMDDVVLGAKSV</Hsp_qseq>
      <Hsp_hseq>GFRKIPMGVGLSPFLLAQFTSAICSVVRRAFPHCLAFSYMDDVVLGAKSV</Hsp_hseq>
      <Hsp_midline>GFRK+PMGVGLSPFLLAQFTS++ S+VRR FPHC+ F+YMDDVVLGAKSV</Hsp_midline>
    </Hsp>
  </Hit_hsps>
</Hit>
<Hit>
  <Hit_num>2</Hit_num>
  <Hit_id>gnl|SRA|SRR10821940.27046739.1</Hit_id>
  <Hit_def>27046739</Hit_def>
  <Hit_accession>SRR10821940.27046739.1</Hit_accession>
  <Hit_len>150</Hit_len>
  <Hit_hsps>
    <Hsp>
      <Hsp_num>1</Hsp_num>
      <Hsp_gaps>0</Hsp_gaps>
      <Hsp_align-len>50</Hsp_align-len>
      <Hsp_qseq>GFRKLPMGVGLSPFLLAQFTSSLASMVRRNFPHCMVFAYMDDVVLGAKSV</Hsp_qseq>
      <Hsp_hseq>GFRKIPMGVGLSPFLLAQFTSAICSVVRRAFPHCLAFSYMDDVVLGAKSV</Hsp_hseq>
      <Hsp_midline>GFRK+PMGVGLSPFLLAQFTS++ S+VRR FPHC+ F+YMDDVVLGAKSV</Hsp_midline>
    </Hsp>
  </Hit_hsps>
</Hit>
<Hit>
  <Hit_num>3</Hit_num>
  <Hit_id>gnl|SRA|SRR10821940.8209197.2</Hit_id>
  <Hit_def>8209197</Hit_def>
  <Hit_accession>SRR10821940.8209197.2</Hit_accession>
  <Hit_len>150</Hit_len>
  <Hit_hsps>
    <Hsp>
      <Hsp_query-frame>0</Hsp_query-frame>
      <Hsp_hit-frame>-1</Hsp_hit-frame>
      <Hsp_gaps>0</Hsp_gaps>
      <Hsp_align-len>50</Hsp_align-len>
      <Hsp_qseq>GFRKLPMGVGLSPFLLAQFTSSLASMVRRNFPHCMVFAYMDDVVLGAKSV</Hsp_qseq>
      <Hsp_hseq>GFRKIPMGVGLSPFLLAQFTSAICSVVRRAFPHCLAFSYMDDVVLGAKSV</Hsp_hseq>
      <Hsp_midline>GFRK+PMGVGLSPFLLAQFTS++ S+VRR FPHC+ F+YMDDVVLGAKSV</Hsp_midline>
    </Hsp>
  </Hit_hsps>
</Hit>
</Iteration_hits>
  <Iteration_stat>
    <Statistics>
      <Statistics_db-num>1266261802</Statistics_db-num>
      <Statistics_db-len>1968308817</Statistics_db-len>
    </Statistics>
  </Iteration_stat>
</Iteration>
</BlastOutput_iterations>
</BlastOutput>

  • 写回答

3条回答 默认 最新

  • CSDN专家-HGJ 2022-03-05 23:25
    关注

    将test.xml文件放在xml-info.py的同一目录下,运行如下代码即可:

    import argparse
    from lxml import etree
    parser=argparse.ArgumentParser()
    parser.add_argument('f',default='test.xml')
    parser.add_argument('-o', default='res.txt')
    args=parser.parse_args()
    fname=args.f
    with open(fname,'r') as fn:
        dt=fn.read()
    html=etree.XML(dt)
    a=html.xpath('//Hit_accession/text()')
    b = html.xpath('//Hsp_hseq/text()')
    s='\n'.join(['>'+x+'\n'+y for x,y in zip(a,b)])
    with open(args.o,'w',encoding='utf-8') as fw:
        fw.write(s)
    

    运行结果的res.txt中内容:

    >SRR6675308.2504034.2
    GFRKIPMGVGLSPFLLAQFTSAICSVVRRAFPHCLAFSYMDDVVLGAKSV
    >SRR10821940.27046739.1
    GFRKIPMGVGLSPFLLAQFTSAICSVVRRAFPHCLAFSYMDDVVLGAKSV
    >SRR10821940.8209197.2
    GFRKIPMGVGLSPFLLAQFTSAICSVVRRAFPHCLAFSYMDDVVLGAKSV
    
    

    如有帮助,请点采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 赞助了问题酬金15元 3月5日
  • 修改了问题 3月5日
  • 展开全部

悬赏问题

  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。
  • ¥15 SQL Server analysis services 服务安装失败
  • ¥15 基于面向对象的图书馆借阅管理系统
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥20 centos linux 7.9安装php8.2.18不支持mysqli模块的问题
  • ¥15 stata空间计量LM检验
  • ¥15 关于k8s node节点被释放后如何驱逐节点并添加新节点