Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python将DNA序列翻译成氨基酸_Python - Fatal编程技术网

用Python将DNA序列翻译成氨基酸

用Python将DNA序列翻译成氨基酸,python,Python,我被困在python的练习中,需要将DNA序列转换成相应的氨基酸。到目前为止,我已经: seq1 = "AATAGGCATAACTTCCTGTTCTGAACAGTTTGA" for i in range(0, len(seq), 3): print seq[i:i+3] 我需要在不使用字典的情况下完成这项工作,我本来打算替换,但似乎也不可取。我怎样才能做到这一点 它应该给出这样的东西,例如: >seq1_1_+ TQSLIVHLIY >seq1_2_+ LNRSFTDSS

我被困在python的练习中,需要将DNA序列转换成相应的氨基酸。到目前为止,我已经:

seq1 = "AATAGGCATAACTTCCTGTTCTGAACAGTTTGA"

for i in range(0, len(seq), 3):
    print seq[i:i+3]
我需要在不使用字典的情况下完成这项工作,我本来打算替换,但似乎也不可取。我怎样才能做到这一点

它应该给出这样的东西,例如:

>seq1_1_+
TQSLIVHLIY
>seq1_2_+
LNRSFTDSST
>seq1_3_+
SIADRSLTHLL
更新2:好的,所以我不得不求助于函数,正如建议的那样,我已经得到了我想要的输出。现在,我有一系列函数,它们返回一系列氨基酸序列,我想得到一个输出文件,如下所示,例如:

>seq1_1_+
iyyslrs-las-smrlssiv-m
>seq1_2_+
fiirydrs-ladrcgshrssk
>seq1_3_+
llfativas-lidaalidrl
>seq1_1_-
frrsmraasis-lativannkm
>seq1_2_-
lddr-ephrsas-lrs-riin
>seq1_3_-
-tidesridqlasydrse--m 
为此,我使用以下方法:

for x in f1:
    x = x.strip()
    if x.count("seq"):
        f2.write((x)+("_1_+\n"))
        f2.write((x)+("_2_+\n"))
        f2.write((x)+("_3_+\n"))
        f2.write((x)+("_1_-\n"))
        f2.write((x)+("_2_-\n"))
        f2.write((x)+("_3_-\n"))
    else:
        f2.write((translate1(x))+("\n"))
        f2.write((translate2(x))+("\n"))
        f2.write((translate3(x))+("\n"))
        f2.write((translate1neg(x))+("\n"))
        f2.write((translate2neg(x))+("\n"))
        f2.write((translate3neg(x))+("\n"))
但与建议的预期输出文件不同,我得到以下结果:

>seq1_1_+
>seq1_2_+
>seq1_3_+
>seq1_1_-
>seq1_2_-
>seq1_3_-
iyyslrs-las-smrlssiv-m
fiirydrs-ladrcgshrssk
llfativas-lidaalidrl
frrsmraasis-lativannkm
lddr-ephrsas-lrs-riin
-tidesridqlasydrse--m

所以他基本上是先做所有的seq,然后再做所有的函数,所以我需要插入它们,问题是如何插入。

如果没有函数或字典,你实际上无法做到这一点。第1部分,将序列转换为三个字符的密码子,非常简单,因为您已经完成了

但是第2部分,要将这些转化为氨基酸,您需要定义一个映射,或者:

mapping = {"NNN": "X", ...}


我喜欢第二个,因为它有最少的重复(因此有可能出错)。

如果没有函数或字典,您实际上无法做到这一点。第1部分,将序列转换为三个字符的密码子,非常简单,因为您已经完成了

但是第2部分,要将这些转化为氨基酸,您需要定义一个映射,或者:

mapping = {"NNN": "X", ...}


我倾向于第二种,因为它有最少的重复(因此有可能出错)。

要翻译,您需要一个表,因此没有字典或其他数据结构似乎很奇怪

也许你可以调查一下?看看他们是如何管理的

您也可以直接从编码链DNA序列进行翻译:

>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> coding_dna = Seq("ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG", IUPAC.unambiguous_dna)
>>> coding_dna
Seq('ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG', IUPACUnambiguousDNA())
>>> coding_dna.translate()
Seq('MAIVMGR*KGAR*', HasStopCodon(IUPACProtein(), '*')) "

您可能需要一个表来翻译,因此没有字典或其他数据结构似乎很奇怪

也许你可以调查一下?看看他们是如何管理的

您也可以直接从编码链DNA序列进行翻译:

>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> coding_dna = Seq("ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG", IUPAC.unambiguous_dna)
>>> coding_dna
Seq('ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG', IUPACUnambiguousDNA())
>>> coding_dna.translate()
Seq('MAIVMGR*KGAR*', HasStopCodon(IUPACProtein(), '*')) "

您可以查看一下

您得到的第一个密码子的氨基酸输出仅仅是因为您在“for循环”中使用了“return”。一旦第一个氨基酸返回,循环终止,因此第二个密码子根本不会被检测

您可以创建一个空列表来保存每个密码子的翻译结果,例如

aa = []
然后,将输出附加到列表中,而不是使用return:

for x in range(0,len(seq1),3):
    nuc2= seq1[x:x+3]
    if nuc2 in ('GCT', 'GCC', 'GCA', 'GCG'):
        aa.append("a")
    elif nuc2 in ('TGT', 'TGC'):
        aa.append("c")
    ....
最后,连接列表中的字母表并从函数返回字符串:

return "".join(aa)
或者直接打印:

print("".join(aa))

只有在“for循环”中使用了“return”,才能获得第一个密码子的氨基酸输出。一旦第一个氨基酸返回,循环终止,因此第二个密码子根本不会被检测

您可以创建一个空列表来保存每个密码子的翻译结果,例如

aa = []
然后,将输出附加到列表中,而不是使用return:

for x in range(0,len(seq1),3):
    nuc2= seq1[x:x+3]
    if nuc2 in ('GCT', 'GCC', 'GCA', 'GCG'):
        aa.append("a")
    elif nuc2 in ('TGT', 'TGC'):
        aa.append("c")
    ....
最后,连接列表中的字母表并从函数返回字符串:

return "".join(aa)
或者直接打印:

print("".join(aa))

您可以将核苷酸碱基转换为数字(碱基4),然后使用字符串中的有序aa进行翻译:

def translate(seq,frame):
    BASES = 'ACGT'
    # standard code
    AA = 'KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF'
    # convert DNA sequence in numbers: A=0; C=1; G=2; T=3
    seqn = [str(BASES.find(i)) for i in seq.upper()]
    # list of all codons in all forward frames (i.e. 3 digit numbers in base 4)
    allframes = [seqn[n:n+3] for n,j in enumerate(seqn) if n <= (len(seq)-3)]
    # translate the codons at the given frame taking the aa in AA string at position given by the number (in base 4) in allframes
    return ''.join([AA[int(i,4)] for i in [''.join(i) for i in allframes[(frame-1)::3]]])
def translate(序列,帧):
基数='ACGT'
#标准代码
AA='KNKNKTTTTRSRSIIMIQHQHPPPPRRRRLLLEDAAAGGGVVV*Y*YSSSS*CWCLFLF'
#以数字形式转换DNA序列:A=0;C=1;G=2;T=3
seqn=[str(base.find(i))表示seq.upper()中的i]
#所有前向帧中的所有密码子列表(即基数4中的3位数字)

allframes=[seqn[n:n+3]对于枚举(seqn)中的n,j,如果n可以将核苷酸碱基转换为数字(碱基4),然后使用字符串中的有序aa进行翻译:

def translate(seq,frame):
    BASES = 'ACGT'
    # standard code
    AA = 'KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF'
    # convert DNA sequence in numbers: A=0; C=1; G=2; T=3
    seqn = [str(BASES.find(i)) for i in seq.upper()]
    # list of all codons in all forward frames (i.e. 3 digit numbers in base 4)
    allframes = [seqn[n:n+3] for n,j in enumerate(seqn) if n <= (len(seq)-3)]
    # translate the codons at the given frame taking the aa in AA string at position given by the number (in base 4) in allframes
    return ''.join([AA[int(i,4)] for i in [''.join(i) for i in allframes[(frame-1)::3]]])
def translate(序列,帧):
基数='ACGT'
#标准代码
AA='KNKNKTTTTRSRSIIMIQHQHPPPPRRRRLLLEDAAAGGGVVV*Y*YSSSS*CWCLFLF'
#以数字形式转换DNA序列:A=0;C=1;G=2;T=3
seqn=[str(base.find(i))表示seq.upper()中的i]
#所有前向帧中的所有密码子列表(即基数4中的3位数字)

allframes=[seqn[n:n+3]表示枚举中的n,j(seqn)如果n,那么您已有的有什么问题?它似乎给出了合理的结果:“AAT”、“AGG”,…预期的输出是什么?标题让我想关闭这个线程,但问题并没有那么糟糕。如果你需要帮助,你仍然需要听取其他用户的建议并更新问题。我有核苷酸,但现在我需要将它们转换成相应的氨基酸:N代表AAT,R代表AGG,…做核苷酸和氨基酸吗ID有1对1的关系?有多少这样的对?你已经有的有什么问题?它似乎给出了合理的结果:“AAT”,“AGG”,…预期的输出是什么?标题让我想关闭这个线程,但问题并没有那么糟糕。如果你需要帮助,你仍然需要听取其他用户的建议并更新问题。我有核苷酸,但现在我需要将它们转换成相应的氨基酸:N代表AAT,R代表AGG,…做核苷酸和氨基酸吗ID有一个1对1的关系?有多少这样的对?好建议,试试这个,我会让你知道好建议,试试这个,我会让你知道,虽然你不能使用函数…创建一个空字符串,而不是返回if的结果,附加到字符串。最后返回字符串。Ops,我想y你无法使用函数…创建一个空字符串,并不是返回if的结果,而是附加到字符串。最后返回字符串。