解析DrugBank数据库数据|Python
- 电脑硬件
- 2025-08-27 17:03:02

一、DrugBank 数据库简介
DrugBank 是一个综合性的生物信息学和化学信息学数据库,专门收录药物和靶点的详细信息。它由加拿大阿尔伯塔大学的 Wishart 研究组 维护,提供化学、药理学、相互作用、代谢、靶点等多方面的药物数据。DrugBank 结合了实验数据和计算预测,广泛应用于药物研发、精准医疗、生物信息学研究等领域。
二、下载公开的数据DrugBank 提供了多种方式下载其数据库,包括 免费的开放数据 和 需要许可的完整数据库。如果需要完整的 DrugBank 数据(包括所有药物、靶点、相互作用等),则需要 注册账户并申请许可。申请页面:DrugBank Release Version 5.1.13 | DrugBank Online
申请步骤 创建 DrugBank 账户:注册页面选择许可类型 Academic License(学术许可,免费):用于非商业科研,如生物信息学研究、论文分析等。Commercial License(商业许可,收费):适用于制药公司、AI 药物研发等商业用途。 提交申请,等待 DrugBank 审核。批准后,可下载完整数据库(通常为 XML、CSV、SQL 格式)这里我们先把免费的开放的药物信息数据下载下来用Python解析。下载的SDF格式,我们需要用到Rdkit包来读取结构文件。
三、Python解析药物SDF文件 import pandas as pd from rdkit import Chem from rdkit.Chem.MolStandardize import rdMolStandardize from rdkit import RDLogger RDLogger.DisableLog('rdApp.*') def get_drug_info(drug_file, current_dir): drug_list = [] drug_dict = {} supplier = Chem.SDMolSupplier(drug_file) for mol in supplier: if mol is not None: mol_id = mol.GetProp('DRUGBANK_ID') drug_name = mol.GetProp('COMMON_NAME') # smiles = Chem.MolToSmiles(mol, isomericSmiles=True, canonical=True) # smiles = standardize_smiles(smiles) smiles = Chem.MolToSmiles(mol) drug_list.append([mol_id, drug_name, smiles]) drug_dict[mol_id] = smiles drug_df = pd.DataFrame(drug_list, columns=['ID', 'Name', 'SMILES']) drug_df.to_csv(current_dir + '/drug_information.csv', index=False) return drug_dict current_dir = './' drug_info_file = current_dir + 'drugbank_structures_2025_02_14.sdf' drug_id_smi_dic = get_drug_info(drug_info_file, current_dir) print('Done!')处理好的文件可在这里drugbank_2025_02_14下载。
四、Python解析药物XML文件 import json import os import xmltodict import pandas as pd """ From xml file to extract drug and traget information. """ current_dir = os.path.dirname(os.path.abspath(__file__)) # 读取 XML 文件并转换为 JSON xml = open(current_dir + "/full-database.xml", encoding="utf-8").read() xml2json = xmltodict.parse(xml, encoding="utf-8") # 将数据保存为JSON文件,设置缩进为4个空格 with open("drugbank.json", 'w', encoding='utf-8') as file: json.dump(xml2json, file, ensure_ascii=False, indent=4) drugs = xml2json['drugbank']['drug'] results = [] for drug in drugs: try: drug_id = drug['drugbank-id'][0]['#text'] except: drug_id = drug['drugbank-id']['#text'] drug_name = drug['name'] try: targets = drug['targets']['target'] except: continue drug_type = drug['@type'] if isinstance(targets, dict): try: uniprot_id = targets['polypeptide']['@id'] except: continue target_id = targets['id'] target_name = targets['name'] results.append([drug_id, drug_name, drug_type, uniprot_id, target_name]) if isinstance(targets, list): for target in targets: try: uniprot_id = target['polypeptide']['@id'] except: continue target_id = target['id'] target_name = target['name'] results.append([drug_id, drug_name, drug_type, uniprot_id, target_name]) my_columns = ['DrugBank ID', 'Drug Name', 'Drug Type', 'UniProt ID', 'Target Name'] df = pd.DataFrame(results, columns=my_columns) df.to_csv(current_dir + '/drugbank.csv', index=False)解析DrugBank数据库数据|Python由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“解析DrugBank数据库数据|Python”