擅长:python、mysql、java
<p>因为BioPython是一个成熟的、广泛使用的模块,专门为这类问题而设计,所以几乎没有理由回避它并重新发明轮子。也就是说,使用正则表达式来识别起始密码子很有用:</p>
<pre><code>from Bio import Seq
import regex as re
startP = re.compile('ATG')
nuc = input_seq.replace('\n','')
longest = (0,)
for m in startP.finditer(nuc, overlapped=True):
if len(Seq.Seq(nuc)[m.start():].translate(to_stop=True)) > longest[0]:
pro = Seq.Seq(nuc)[m.start():].translate(to_stop=True)
longest = (len(pro),
m.start(),
str(pro),
nuc[m.start():m.start()+len(pro)*3+3])
</code></pre>
<p>注意,这使用了<code>regex</code>模块,而不是<code>re</code>模块;前者允许更容易地识别重叠匹配。我们可以让BioPython计算三胞胎并寻找终止密码子,而不是尝试通过正则表达式来实现这一点。在</p>
<p>在这里,<code>longest</code>产生由ORF编码的蛋白质的长度、起始位点(注意,使用基于0的编号)、由ORF编码的蛋白质序列以及ORF本身的序列,包括终止密码子。在</p>
^{pr2}$