在Python中解析公共数据库中的生物序列的脚本

2024-05-05 16:00:48 发布

您现在位置:Python中文网/ 问答频道 /正文

向stackoverflow社区致意

我目前正在攻读生物信息学模块,作为生物医学学位的一部分(我基本上是一个python新手),以下任务是python编程任务的一部分:

提取motif序列(氨基酸序列,基本上是程序语言中的字符串),这些序列是从实现多序列比对和随后迭代数据库扫描以生成最佳保守序列的算法中删除的。最终的想法是从这些“母题”中推断出功能意义。在

这些模体存储在公共数据库的文件中,这些文件具有与每个蛋白质对应的多个数据字段(uniprot ID、登录号、排列本身存储在hyperlink.seq文件中),目前其中一个在这个范围内是感兴趣的。数据字段称为“提取的模体集”。在

我的问题是如何编写一个脚本来解析“motif字符串”并将它们输出到文件中。我现在已经对脚本进行了编码,如下所示(我还没有将结果写入文件):

import os, re, sys, string 

printsdb = open('/users/spyros/folder1/python/PRINTSmotifs/prints41_1.kdat', 'r')

protname = None  
final_motifs = []

for line in printsdb.readlines():
 if line.startswith('gc;'):
        protname = line.lstrip()    
        #string.lower(name)  # convert to lowercase
        break

def extract_final_motifs(protname):

"""Extracts the sequences of the 'final motifs sets' for a PRINTS entry.
Sequences are on lines starting 'fd;' A simple regex is used for retrieval"""

for line in printsdb.readlines():
        if line.startswith('fd;'):
                final_motifs = re.compile('^\s+([A-Z]+)\s+<')
                final_motifs = final_motifs.match(line)
                #print(final_motifs.groups()[0])
                motif_dict = {protname : final_motifs}
                break 
return 

motif_dict = extract_final_motifs('ADENOSINER')
print(motif_dict)  

现在的问题是,当我的代码在原始数据库文件(prints41)上循环时!。kdat)而不是像下面Simon Cockell建议的那样使用urllib模块连接到公共数据库,而是在pythonshell上简单地“none”,而它应该创建一个列表,比如[AAYIGIEVLI,AAYIGIEVLI,AAYIGIEVLI,等等]

有人知道逻辑错误在哪里吗?感谢您的任何意见!! 我很抱歉文本太多了,我只是希望尽可能的清楚。提前感谢您的帮助!在


Tags: 模块文件字符串数据库forline序列dict
2条回答

您是否注意到您的函数不返回值?这就是为什么没有。在

首先,您所做的几乎是正确的,但是您必须将"extracted motif sets"连2更改为一个变量,比如linefor循环的作用是逐行返回文件中的数据,作为for后面的变量,本例是line。现在问题是lysozyme.seq文件是如何格式化的。听起来好像没有任何数据字段有任何间距。那就意味着你可能不用做line.split(" ")line.split("\t")\tmeas标签。split将执行它所说的,每次看到" "或{}时,它都会拆分字符串,这取决于您在程序中编写的内容。在

在Saning目录中查找文件应该不难,这里可能有一些问题。在

如果你发布的数据或部分的形式之一的文件,以便我们可以看到它,我们可能可以帮助你pars它:)。在

相关问题 更多 >