xml怎么把每个标签都取一遍_xml怎么把每个标签都取一遍_python xml提取多重标签内容...

所用文件地址:链接: https://pan.baidu.com/s/1slqQRvv 密码: 3ce1

最近用xml.etree.ElementTree包做了一个药物重定位的xml文件提取,这种xml文件不同于一般的xml文件,各级标签不同于ElementTree官方文档https://docs.python.org/2/library/xml.etree.elementtree.html所给出的类型,所以提取的关键在于标签指定是否正确。废话少说,直接上代码:

#coding=utf-8

from xml.etree import ElementTree as ET

f = open('Drug_info.txt','w')#保存路径

per=ET.parse('test2.xml')#打开xml文件

p=per.findall('./')#得到所有的drug标签

for drug in p:#遍历每个drug

print('=====name=====')#这个后期可以删除,这里是方便你看输出

name = drug.find('{http://www.drugbank.ca}name').text#得到drug标签下的name标签中的内容,但一定要加{http://www.drugbank.ca},它这个XML文件就这么恶心,这个是最大的坑,今天遍历子节点才发现这个问题

print('Drug_name:'+name)

f.writelines(name)#写drugName

print('=====targets_name======')

for target in drug.iter('{http://www.drugbank.ca}target'):#遍历drug下的target标签中的name

name = target.find('{http://www.drugbank.ca}name').text#使用find是找出第一个targetName就停止

print('Targets_name:'+name)

f.writelines(','+name)#写targetName

print('=====SMILES=====')

for CP in drug.iter('{http://www.drugbank.ca}calculated-properties'):#SMILES只存在于calculated-properties中,所以在calculated-properties中提取就可以了

PROPERTY = CP.findall('{http://www.drugbank.ca}property')#再提calculated-properties标签中的property标签,因为kind,value都在property下

index = []#建立两个空list,index是存储kind标签中的值,VALUE是存储value标签中的值,建立一一对应关系

VALUE = []

for ele in PROPERTY:

kind = ele.find('{http://www.drugbank.ca}kind').text#得到kind的内容

value = ele.find('{http://www.drugbank.ca}value').text#得到value的内容

index.append(kind)#index中添加kind标签中的内容

VALUE.append(value)#VALUE中添加value标签中的内容

for idx in index:#遍历index列表

if idx=='SMILES':#找到‘SMILES'所在index列表中的位置

no = index.index(idx)#找到‘SMILES'所在index列表中的位置

Molecular_formula = VALUE[no]#应为index和VALUE是一一对应关系,只要找到’SMILES‘在index中的位置也就知道分子式在VALUE中的位置

print('分子式:'+Molecular_formula)

f.writelines('#'+Molecular_formula)#写入分子式

break#一个drug只有一个SMILES,所以找到SMILES直接中断,不必再循环下去,节省计算消耗

f.writelines('\n')#每个药物获取所有信息结束后要加一个回车“\n”

f.close()#最后关闭文件如果你的xml文件就是官方文档的类型,可以直接参考官方文档给的例子,地址再附一遍:https://docs.python.org/2/library/xml.etree.elementtree.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值