我有一个FASTA文件,其中有一组序列,格式如下:
BMRat|XM_008846946.1 ATGAAGAACATCACAGAAGCCACCACCTTCATTCTCAAGGGACTCACAGACAATGTGGAACTACAGGTCA TCCTCTTTTTTCTCTTTCTAGCGATTTATCTCTTCACTCTCATAGGAAATTTAGGACTTATTATTTTAGT TATTGGGGATTCAAAACTCCACAACCCTATGTACTGTTTTCTGAGTGTATTGTCTTCTGTAGATGCCTGC TATTCCTCAGACATCACCCCGAATATGTTAGTAGGCTTCCTGTCAAAAAACAAAGGCATTTCTCTCCATG GATGTGCAACACAGTTGTTTCTCGCTGTTACTTTTGGAACCACAGAATGCTTTCTGTTGGCGGCAATGGC TTATGACCGCTATGTAGCCATCCATGACCCACTTCTCTATGCAGTGAGCATGTCACCAAGGATCTATGTG CCGCTCATCATTGCTTCCTATGCTGGTGGAATTCTGCATGCGATTATCCACACCGTGGCCACCTTCAGCC TGTCCTTCTGTGGATCTAATGAAATCAGTCATATATTCTGTGACATCCCTCCTCTGCTGGCTATTTCTTG TTCTGACACTTACATCAATGAGCTCCTGTTGTTCTTCTTTGTGAGCTCCATAGAAATAGTCACTATCCTC ATCATCCTGGTCTCTTATGGTTTCATCCTTATGGCCATTCTGAAGATGAATTCAGCTGAAGGGAGGAGAA AAGTCTTCTCTGCATGTGGGTCTCACCTAACTGGAGTGTCCATTTTCTATGGGACAAGCCTTTTCATGTA TGTGAGACCAAGCTCCAACTATTCCTTGGCACATGACATGGTAGTGTCGACATTTTATACCATTGTGATT CCCATGCTGAACCCTGTCATCTACAGTCTGAGGAACAAAGATGTGAAAGAGGCAATGAGAAGATTTTTGA AGAAAAATTTTCAGAAACTTTAA
使用biopython http://biopython.org/wiki/Seq实现的代码允许我在FASTA文件中找到以蛋氨酸开始、以终止密码子结束的最长氨基酸序列。在
函数是find_largest_polypeptide_in_DNA
。基本上,它使用3个不同的前向读码框架将DNA序列翻译成氨基酸序列,并在变量allPossibilities
中保存以M(一种特定的氨基酸)开始并以终止密码子结束的片段。然后比较各种可能性的长度,选择最长的可能性,返回该片段的蛋白质序列。在
def find_largest_polypeptide_in_DNA(seq, translationTable=1):
allPossibilities = []
for frame in range(3):
trans = str(seq[frame:].translate(translationTable))
framePossibilitiesF = [i[i.find("M"):] for i in trans.split("*") if "M" in i]
allPossibilities += framePossibilitiesF
allPossibilitiesLengths = [len(i) for i in allPossibilities]
if len(allPossibilitiesLengths) == 0:
raise Exception("no candidate ORFs")
proteinAsString = allPossibilities[allPossibilitiesLengths.index(max(allPossibilitiesLengths))]
return Seq(proteinAsString, alphabet=ProteinAlphabet)
它工作得很好,但是现在我想得到与功能返回的蛋白质序列相对应的DNA序列。我需要在函数中添加一些行来获得这两个序列,但我不知道怎么做。 我不知道是否有可能追踪I.find(“M”)中每个蛋氨酸的位置,然后用这个位置在核苷酸序列中追踪它。在
谢谢。在
我认为遵循类似的原则编写一个新函数是最容易的。你的想法是“跟踪i.find('M')中每种蛋氨酸的位置”基本上就是下面所做的。用你开始的代码做这件事的困难在于序列被
split('*')
分割,所以DNA起始位置是读取帧偏移量加上相关序列之前的所有片段的密码子之和。根据您的澄清,我添加了一个封闭循环来遍历前后方向。在相关问题 更多 >
编程相关推荐