首页 > 其他分享 >.sdf和.msp文件读取

.sdf和.msp文件读取

时间:2024-04-01 11:02:00浏览次数:23  
标签:startswith elif 读取 lines msp sdf split mol

前言

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

读取

rdkit安装

pip install rdkit

.sdf读取

from rdkit import Chem


suppl_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 = 0
    spectrums = []
    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 += 1
            mz = 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 += 1
    spec.save_as_mgf(spectrums, save_path+'MassBank1.mgf')

结语

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

标签:startswith,elif,读取,lines,msp,sdf,split,mol
From: https://blog.csdn.net/Burger_/article/details/137223578

相关文章

  • 选择题部分的读取写入,以及重复进入的保证列表内数据不丢失的方法以及判断重复试题输
    1.思路讲解1.1首先读取部分,我们事先准备好一个文件夹,在内部创建一个文件,注意文件名不可重复,我这边使用了datetime.date.today()来达到文件名始终为当前日期的方式,再利用os.path.exists(path)来判断文件路径是否存在,如若不存在就新建,存在就追加1.2进行读取时,我们找到......
  • golang 读取文件内容,清空文件内容,把读取的内容写入到文件里
    packagemainimport( "encoding/json" "fmt" "io" "log" "os")typePvRelationListstruct{ Item[]PvRelationInfo`json:"item"`}typePvRelationInfostruct{ PodNamestring`json:"p......
  • 如何在Java中读取超过内存大小的文件
    读取文件内容,然后进行处理,在Java中我们通常利用Files类中的方法,将可以文件内容加载到内存,并流顺利地进行处理。但是,在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大。此时,我们则需要采用另一种策略:部分读取它,并具有其他结构来仅编译所需的数据。接下来,我们就来......
  • 泛微e-cology_getE9DevelopAllNameValue2任意文件读取漏洞
    漏洞描述泛微e-cology依托全新的设计理念,全新的管理思想。为中大型组织创建全新的高效协同办公环境。智能语音办公,简化软件操作界面。身份认证、电子签名、电子签章、数据存证让合同全程数字化。泛微e-cologygetE9DevelopAllNameValue2接口存在任意文件读取漏洞,通过该漏洞......
  • 飞企互联-FE企业运营管理平台ShowImageServlet接口存在任意文件读取漏洞
    声明:本文仅用于技术交流,请勿用于非法用途由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。简介FE企业运营管理平台是一种基于先进技术的云工作台,采用云计算、智能化、大数据、物联网和移动互联网等技......
  • 文本数据读取
    文本数据读取在自然语言处理的第一步,要面对的是各种各样以不同形式表现的文本数据,比如,有的是纯txt文档,有的是存储在Excel中的表格数据,还有的是无法直接打开的pkl文件等。刚开始接触编程的同学在这里就犯难了,这可怎么把文本数据拿来进行代码层面的操作呢?事实上,会者不难,针对......
  • 如何使用Python读取、旋转和和创建空白的PDF文件
    试想象一下,你正在处理一堆PDF文件,需要从中提取一些信息或者修改其中的内容。如果你不使用Python,你可能需要手动打开每个文件,复制粘贴你需要的内容,然后再保存为一个新的文件。这简直是一场噩梦!但是,有了Python,你可以轻松地编写一个脚本来自动化这个过程,节省大量时间和精力。那......
  • Day51:WEB攻防-前后台功能点&文件下载&文件读取&文件删除&目录遍历&目录穿越
    目录文件安全-下载&读取&删除-案例黑白盒下载=读取文件删除目录安全-遍历&穿越-案例黑白盒目录遍历目录穿越知识点:1、文件安全-前后台功能点-下载&读取&删除2、目录安全-前后台功能点-目录遍历&目录穿越文件安全-下载&读取&删除-案例黑白盒1、下载=读取......
  • java多现场读取list
    1.需要一个线程类packagecom.cdncp.testautomation.control.conf;importorg.apache.commons.lang.ArrayUtils;importjava.util.ArrayList;importjava.util.List;publicclassHandleThreadextendsThread{privateStringthreadName;privateList<String&......
  • EasyExcel库来读取指定Excel文件中的数据
    FileexcelFile=newFile(path);if(!excelFile.exists()){thrownewException("Thespecifiedexcelfiledoesnotexistatpath:"+path);}//使用EasyExcel读取文件......