我正在寻找一种漂亮的pythonic方法来找到DNA序列中的开放阅读框架.我发现许多在线实现使用索引,标志和其他这样的丑陋.
我很确定可以创建正则表达式实现,但我对正则表达式不好.一般的想法是我想通过'ATG','TAG','TGA'和'TAA'分割出一串DNA序列.但是我不想在重叠区域上分裂,例如序列'ATGA'应该分成'ATG','A'.基本上在三个框架中的每个框架中从左到右.
为清晰起见编辑:如评论中所述,尽管存在(在非零帧中),但ATGATTTTGA应该将一个序列拆分为ATG,TTTTGATGA
edit2:这就是我在没有正则表达式的情况下使用list comprehension splitting链接实现的方法.我讨厌使用旗帜.
def find_orf(seq):
length = 0
stop = ['TAA','TGA','TAG']
for frame in range(3):
orfFlag, thisLen = None, 0
splitSeq = [seq[start+frame:start+frame+3] for start in range(0,len(seq),3)]
for codon in splitSeq:
if codon == 'ATG':
orfFlag = True
thisLen += 1
elif orfFlag and codon in stop:
orfFlag = None
if thisLen > length:
length = thisLen
else:
thisLen += 1
return length
Run Code Online (Sandbox Code Playgroud)
我不确定你建议的正则表达式方法是否特别Pythonic,但基本的正则表达式:
import re
v=re.compile("((ATG)|(TGA)|(TAG)|(TAA))")
test="CCATGACCCATGCACCATTGAC"
for i in v.findall(test):
print i
Run Code Online (Sandbox Code Playgroud)
确实错过了属于 ATGA 一部分的第一个 TGA,并且只报告了第二个。一般来说,这不会起作用,因为你必须假设你的基因框架,而这可能是提前不知道的。
一种非常易读的方法是简单地对所有三个阅读框架进行列表理解。
| 归档时间: |
|
| 查看次数: |
1073 次 |
| 最近记录: |