2

问候 stackoverflow 社区,

我目前正在关注生物信息学模块作为生物医学学位的一部分(我基本上是 python 新手),并且作为 Python 编程任务的一部分需要以下任务:

提取基序序列(氨基酸序列,因此基本上是程序语言中的字符串,已从实现多序列比对和随后迭代数据库扫描以生成最佳保守序列的算法中切除。最终的想法是从这样的“图案”)。

这些基序存储在公共数据库中的文件中,这些文件具有对应于每个蛋白质的多个数据字段(uniprot ID、登录号、存储在超链接 .seq 文件中的比对本身),目前其中一个在此范围内感兴趣。数据字段称为“提取的主题集”。

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

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) 上循环而不是使用 urllib 模块连接到公共数据库,正如下面 Simon Cockell 所建议的那样,脚本的输出在python shell,而它应该创建一个列表,例如 [AAYIGIEVLI, AAYIGIEVLI, AAYIGIEVLI, etc..]

有人知道逻辑错误在哪里吗?任何输入表示赞赏!我为冗长的文字道歉,我只是希望尽可能清楚。提前感谢您的帮助!

4

2 回答 2

0

首先,您所做的几乎是正确的,但您必须将"extracted motif sets"lien 2 更改为变量 say line。在这种情况下,for循环将做的是逐行从文件中返回数据作为变量。现在是如何格式化文件的问题。听起来好像没有任何数据字段有任何间距。那么这意味着你可能会逃避做事或测量标签。拆分将按照它所说的那样每次看到 a或根据您在程序中编写的内容拆分字符串。forlinelysozyme.seqline.split(" ")line.split("\t") \t" ""\t"

Saning 目录查找文件应该不难,这里可能有一些关于它的问题。

如果您以其中一个文件的形式发布数据或一部分,以便我们查看它,我们可能会帮助您解析它:)。

于 2011-04-10T20:42:25.330 回答
0

您是否注意到您的函数没有返回值?这就是None的原因。

于 2013-11-06T09:18:42.230 回答