Emi*_*raz -1 python translation bioinformatics dna-sequence python-3.x
我必须将DNA序列的互补序列翻译成氨基酸
TTTCAATACTAGCATGACCAAAGTGGGAACCCCCTTACGTAGCATGACCCATATATATATATATA
TATATATATATATATGGGTCATGCTACGTAAGGGGGTTCCCACTTTGGTCATGCTAGTATTGAAA
+1 TyrIleTyrIleTyrGlySerCysTyrValArgGlyPheProLeuTrpSerCysStpTyrStp
+2 IleTyrIleTyrMetGlyHisAlaThrOc*GlyGlySerHisPheGlyHisAlaSerIleglu
+3 TyrIleTyrIleTrpValMetLeuArgLysGlyValProThrLeuValMetLeuValLeuLys
Run Code Online (Sandbox Code Playgroud)
我已经尝试了下一个代码来获得我的结果,但所以我得到了一个补充的seq.没有分裂.
seq = "CCGGAAGAGCTTACTTAG"
basecomplement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
def translate(seq):
x = 0
aaseq = []
while True:
try:
aaseq.append(basecomplement[seq[x:x+1]])
x += 1
except (IndexError, KeyError):
break
return aaseq
for frame in range(1):
#print(translate(seq[frame:]))
rseqn= (''.join(item.split('|')[0] for item in translate(seq[frame:])))
rseqn = list(rseqn)
rseqn.reverse()
print( rseqn)
Run Code Online (Sandbox Code Playgroud)
谁能帮助我得到我的结果?
看起来你已经采用了一些代码并尝试使用它而完全不了解它的作用.如果您阅读链接的问题,您会注意到该问题中的海报上有一个由...分隔的氨基酸代码字典|.调用split是提取每个代码字符串的第二部分,例如从"F|Phe"你想要获取"Phe",这就是海报需要的原因split.您没有这些类型的字符串,因此您不应该使用该部分代码.
我将推荐joaquin建议使用BioPython,因为它显然是适合这项工作的工具,但出于学习目的:您需要知道的第一件事是您要完成四项任务:
链接答案中的代码不处理第一步.为此,您可以使用translatePython字符串对象的方法.首先,您使用maketrans生成将映射key => value的翻译字典,
basecomplement = str.maketrans({'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'})
Run Code Online (Sandbox Code Playgroud)
然后你可以写一个方法来产生反向补码,
def reverse_complement(seq):
return seq.translate(basecomplement)[::-1]
Run Code Online (Sandbox Code Playgroud)
在translate华对其他问题的回答的方法实施步骤2和3更有效地使用它实际上可以做grouper的食谱itertools.首先,你需要一个字典映射基础三联体到氨基酸,
amino_acids = {'TAT': 'Tyr', ...}
Run Code Online (Sandbox Code Playgroud)
然后你可以用它来转换任何碱基序列,
amino_acids[''.join(a)] for a in zip(*([iter(rseq)]*3))
Run Code Online (Sandbox Code Playgroud)
作为解释,一次zip(*([iter(rseq)]*3))将字符分组三个.但它确实是元组,而不是字符串,例如'TATATA'你得到的('T', 'A', 'T'), ('A', 'T', 'A'),所以你需要加入每个元组来创建一个字符串.这是什么''.join(a).然后你在氨基酸表中查找字符串,这是由amino_acids[...].
最后,您需要将所有生成的氨基酸代码连接在一起,这可以通过外部来完成''.join(...).所以你可以定义一个像这样的方法:
def to_amino_acids(seq):
return ''.join(amino_acids[''.join(a)] for a in zip(*([iter(rseq)]*3)))
Run Code Online (Sandbox Code Playgroud)
请注意,.split('|')除非您的amino_acids词典包含多个由...分隔的表示,否则您不需要|.
最后,为了将这些碱基转换为氨基酸(即三个框架)的三种不同方法,你可以使用类似于joaquin的答案中的最终循环的东西,
rseq = reverse_complement(seq)
for frame in range(3):
# print the frame number
print('+', frame+1, end=' ')
# translate the base sequence to amino acids and print it
print(to_amino_acids(rseq[frame:]))
Run Code Online (Sandbox Code Playgroud)
请注意,这个循环运行3次,打印三种不同的帧.如果你想让它运行一次就没有任何意义.
使用:
for frame in range(1):
rseqn = reversed([item for item in translate(seq[frame:])])
rseqn = ''.join(rseqn)
print(rseqn)
Run Code Online (Sandbox Code Playgroud)
这产生了正确的互补(反向)安全性:
CTAAGTAAGCTCTTCCGG
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要for循环(当前实际上什么都不做)来确定DNA或RNA互补序列,因为这与翻译框架无关.
然而,话虽如此,我必须强调,如果您开始将BioPython用于Bioinformatic任务,那么所有代码都可以简化为四行:
>>> from Bio import SeqIO
>>> from Bio.Alphabet import NucleotideAlphabet
>>> dna = SeqIO.Seq("CCGGAAGAGCTTACTTAG", NucleotideAlphabet())
>>> dna.reverse_complement()
Seq('CTAAGTAAGCTCTTCCGG', NucleotideAlphabet())
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5945 次 |
| 最近记录: |