<p>你的要求我不清楚。在你的问题中,你说“<em>我想知道出现在任何序列的第3帧中的最长开放阅读帧(ORF)的长度?</em>”在随后的评论中,你说“<em>我只对从任意阅读帧中综合计算每个ORF感兴趣。它们对我都很重要。</em>“</p>
<p>假设你想要的是后者,这里有一个简单的方法从fasta格式的序列集合中获取所有的orf,使用BioPython来完成大部分工作。在</p>
<pre><code>import io # Only needed because input is in string form
from Bio import Seq, SeqIO
import regex as re
startP = re.compile('ATG')
def get_orfs(nuc):
orfs = []
for m in startP.finditer(nuc, overlapped=True):
pro = Seq.Seq(nuc)[m.start():].translate(to_stop=True)
orfs.append(nuc[m.start():m.start()+len(pro)*3+3])
return orfs
for fasta in SeqIO.parse(io.StringIO(fasta_inputs), 'fasta'):
header = fasta.description
orfs = get_orfs(str(fasta.seq))
print(header, orfs)
</code></pre>
<p>注意事项:</p>
<ol>
<li>通常你会从文件中读取fasta集合。因为这里是字符串格式,所以我们使用斯金吉奥使其易于与来自BioPython的<code>SeqIO.parse</code>兼容</li>
<li><code>get_orfs</code>函数查找atg并返回每个atg的ORG。如果您还对第4帧到第6帧感兴趣,则需要序列的<a href="http://biopython.org/wiki/Seq#Complement_and_reverse_complement" rel="nofollow">^{<cd3>}</a>。在</li>
<li>如果您只对每个fasta序列中最长的ORF感兴趣,那么可以使用get_orfs函数<code>return (max(orfs, key=len))</code></li>
<li>如果你只对一个特定帧(例如帧3)中的ATG开始的orf感兴趣,则会稍微困难一些。ATG可能会从最简单的方法开始,而不是从最简单的框架中找到所有ORF。在</li>
</ol>