当前位置: 首页 > news >正文

.sdf和.msp文件读取

前言

        .sdf和.msp文件都可以用来存储分子信息,.sdf文件可以用rdkit读取,.msp文件就只能当成文本文档读取了。

读取

rdkit安装

pip install rdkit

.sdf读取

from rdkit import Chemsuppl_h = Chem.SDMolSupplier('../data/HMDB/f_hmdb.sdf') # 得到一个迭代器
mols_h = [mol for mol in suppl_h if mol] 
hmdb_smi = [mol.GetProp('SMILES') for mol in mols_h]
hmdb_smi_set = set(hmdb_smi)

 分子mol有一些常用的函数:

mol.GetPropsAsDict() # 可以获得分子的所有key及其value
smi = 'COO'
mol.SetProp('SMILES', smi) # 可以设置mol的属性

.msp读取

         把.msp文件当成普通的文本文档去读取,主要涉及字符串操作。

def read_msp2mgf(file_path, save_path):f = open(file_path, 'r')lines = f.readlines()i = 0spectrums = []while i < len(lines):l = lines[i].replace('\n', '')     # 空行用空字符替换if l.startswith('Name:'):name = l.split(': ')[-1]elif l.startswith('InChIKey:'):inchikey = l.split(': ')[-1]elif l.startswith('SMILES:'):smiles = l.split(': ')[-1]elif l.startswith('ExactMass:'):exactmass = float(l.split(': ')[-1])elif l.startswith('Num Peaks:'):num_peaks = int(l.split(': ')[-1])elif len(l) > 0 and ':' not in l:mz, inten = [], []while lines[i] != '\n':mz.append(float(lines[i].split(' ')[0]))inten.append(float(lines[i].split(' ')[1]))i += 1mz = np.array(mz)inten = np.array(inten)metadata = {'Name':name, 'InChIKey':inchikey,'SMILES':smiles, 'ExactMass':exactmass, 'Num Peaks':num_peaks}spectrum = spec.Spectrum(mz, inten, metadata)spectrums.append(spectrum)i += 1spec.save_as_mgf(spectrums, save_path+'MassBank1.mgf')

结语

        有问题欢迎在评论区讨论。

相关文章:

  • Python-Matplotlib数据可视化
  • 【系统架构师】-第13章-层次式架构设计
  • Java中copy 一个list,不用BeanUtils.copyProperties
  • linux基础命令篇:Linux基础命令讲解——文件浏览(cat、less、head、tail和grep)
  • 2024.3.31力扣(1200-1400)刷题记录
  • ubuntu23.10配置RUST开发环境
  • Web框架开发-Form组件和ajax实现注册
  • 《QT实用小工具·五》串口助手
  • MIT最新研究成果 机器人能够从错误中纠偏 无需编程介入和重复演示
  • Android知识 - 代码混淆ProGuard规则介绍
  • C#.net8创建webapi,使用SqlSugar,仓储模式,DTO,服务层,控制层的综合应用(企业级)
  • ConfigMap和Secret配置Pod环境变量与热更新
  • C语言TCP服务器模型 : select + 多线程与双循环单线程阻塞服务器的比较
  • 基于RK3588多can口多串口机器人全功能板
  • 需要给Word文档中的汉字注音,拼音要在汉字的右边 要怎么操作?两种方法一学就会
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • docker容器内的网络抓包
  • javascript 哈希表
  • JavaScript对象详解
  • JDK 6和JDK 7中的substring()方法
  • Just for fun——迅速写完快速排序
  • Linux各目录及每个目录的详细介绍
  • uva 10370 Above Average
  • Vue小说阅读器(仿追书神器)
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信小程序设置上一页数据
  • 学习笔记TF060:图像语音结合,看图说话
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​2021半年盘点,不想你错过的重磅新书
  • ​ubuntu下安装kvm虚拟机
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #大学#套接字
  • $$$$GB2312-80区位编码表$$$$
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (力扣题库)跳跃游戏II(c++)
  • (七)理解angular中的module和injector,即依赖注入
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)菜鸟学数据库(三)——存储过程
  • *上位机的定义
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .“空心村”成因分析及解决对策122344
  • .Net Redis的秒杀Dome和异步执行
  • .NET 中的轻量级线程安全
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • /bin/rm: 参数列表过长"的解决办法
  • @vue/cli脚手架
  • []T 还是 []*T, 这是一个问题
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [Android View] 可绘制形状 (Shape Xml)