IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python实现】解析Drugbank文件中的XML -> 正文阅读

[Python知识库]【Python实现】解析Drugbank文件中的XML

作者:recommend-item-box type_blog clearfix

??在做Drugbank数据处理时,发现的一个能够解决我问题的开源代码:
项目地址以及Test文件,都在:

https://github.com/Deshan-Zhou/deal_DrugBank
from xml.sax.handler import ContentHandler
from xml.sax import parse
import pandas as pd
"""
简写:
dbid : DrugBank id
dbname : DrugBank name
chid : ChEMBL id
ptid : protein id
"""
class ExtractData(ContentHandler):

    def __init__(self):
        #各个简写的映射关系
        self.dbid_chid = {}
        self.dbid_dbname = {}
        self.dbid_dbid = {}
        self.dbid_ptid = {}
        #当前的药物id和遍历区域的限定
        self.curr_id = ""
        self.limit = 0

    #可以自动获取遍历到的元素里面的内容,如<ele>content.....</ele>
    def characters(self,content):
        if self.limit == 2:
            self.curr_id = content
            self.limit = 3

        elif self.limit == 4:
            self.dbid_dbname[self.curr_id] = content
            self.limit = 0

        elif self.limit == 6:
            self.dbid_dbid.setdefault(self.curr_id,set()).add(content)
            self.limit = 5

        elif self.limit == 8:
            if content == "ChEMBL":
                self.limit = 9

        elif self.limit == 10:
            self.dbid_chid[self.curr_id] = content
            self.limit = 0

    #遍历到标签开始时调用        
    def startElement(self,name,attrs):
        if name == "drug":
            self.limit = 1
            
        if self.limit == 1 and name == "drugbank-id" and attrs:
            if attrs["primary"] == "true":
                self.limit = 2

        elif self.limit == 3 and name=="name":
            self.limit = 4

        elif name == "drug-interactions":
            self.limit = 5
        
        elif self.limit == 5 and name == "drugbank-id":
            self.limit = 6

        elif name == "targets":
            self.limit = 7

        elif self.limit == 7 and name == "polypeptide":
            self.dbid_ptid.setdefault(self.curr_id,set()).add(attrs["id"])

        elif name == "resource" and self.limit!=7:
            self.limit= 8

        elif self.limit == 9 and name == "identifier":
            self.limit = 10
            
    #遍历到标签结束时调用  
    def endElement(self,name):
        if name == "drug-interactions":
            self.limit = 0
            
        elif name == "targets":
            self.limit = 0
    #遍历结束时调用
    def endDocument(self):
        #DrugBank id和ChEMBL id的映射
        list1_key=[]
        list1_val=[]
        list1_columns="ChEMBL_id",
        for key,val in self.dbid_chid.items():
            list1_key.append(key)
            list1_val.append(val)
        file1=pd.DataFrame(index=list1_key,columns=list1_columns,data=list1_val)
        file1.to_csv('dbid_chid.csv')

        #DrugBank id和drug name的映射
        list2_key=[]
        list2_val=[]
        list2_columns="Drug_name",
        for key,val in self.dbid_dbname.items():
            list2_key.append(key)
            list2_val.append(val)
        file2=pd.DataFrame(index=list2_key,columns=list2_columns,data=list2_val)
        file2.to_csv('dbid_dbname.csv')

#这个映射关系太多,后期再处理
#        for data in self.dbid_dbid.items():
#            print(3,data)

        #DrugBank id和target id的相互作用映射
        list4_key=[]
        list4_val=[]
        for key,val in self.dbid_ptid.items():
            list4_key.append(key)
            list4_val.append(list(val))
        file4=pd.DataFrame(index=list4_key,data=list4_val)
        file4.to_csv('dbid_ptid.csv')


parse('full database.xml',ExtractData())
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:39:24  更:2022-04-07 22:39:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 23:33:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计