我想通过一个基因获得一个10bp长序列表,其中包含每个feature.type =='mRNA'
的外显子/内含子边界。好像我需要使用compoundLocation
和'join'
中使用的位置,但我无法弄清楚如何操作,或找到教程。
有谁能请给我一个例子或指向我的教程?
答案 0 :(得分:1)
假设您在评论中显示的确切格式的所有信息,以及您在每个介绍/外显边界的任一侧寻找20 bp,这样的事情可能是一个开始:
编辑: 如果您实际上是从GenBank记录开始,那么它就不会那么难了。假设您要查找的完整结点字符串位于CDS功能信息中,则:
for f in record.features:
if f.type == 'CDS':
jct_info = str(f.location)
将“位置”信息转换为字符串,您可以继续如下。
(有一些方法可以直接使用位置信息而无需转换为字符串 - 特别是您可以使用“extract”将拼接序列直接拉出父序列 - 但是您想要的步骤涉及到通过转换为str然后转换为int,可以更快,更轻松地完成。)
import re
jct_info = "join{[0:229](+), [11680:11768](+), [11871:12135](+), [15277:15339](+), [16136:16416](+), [17220:17471](+), [17547:17671](+)"
jctP = re.compile("\[\d+\:\d+\]")
jcts = jctP.findall(jct_info)
jcts
['[0:229]', '[11680:11768]', '[11871:12135]', '[15277:15339]', '[16136:16416]', '[17220:17471]', '[17547:17671]']
现在,您可以循环遍历start:end值列表,将它们从文本中拉出并将它们转换为int,以便您可以将它们用作序列索引。像这样:
for jct in jcts:
(start,end) = jct.replace('[', '').replace(']', '').split(':')
try: # You need to account for going out of index, e.g. where start = 0
start_20_20 = seq[int(start)-20:int(start)+20]
except IndexError:
# do your alternatives e.g. start = int(start)