【发布时间】:2021-12-07 02:36:45
【问题描述】:
我一直在努力将 DNA 序列列表转换为氨基酸序列。我写的函数应该读取三个核苷酸的 DNA 列表。它应该遍历列表中的序列并使用目录中的密码子翻译每个序列。现在我知道这个问题并不完全是新问题,而且 Biopython 有一个为这类东西制作的翻译模块。困难在于我后来想使用简并密码子目录,带有 NNK 密码子代码(K 是 G 或 T),就我的研究而言,不可能使用 Biopython 制作自定义密码子 dics。我使用的 DNA 序列的长度也不统一。
现在我认为是时候更深入地解释一下我的数据在哪里了。 DNA序列列表来自。这些序列(从一对夫妇 1000 到超过 100 万个)是介于标记之间的随机核苷酸,这些标记是我通过使用正则表达式搜索写入文本文件的函数分离出来的。该文件的结构如下所示:
CACCAGAGTGAGAATAGAAA CCAAAAAAAAAGGCTCCAAAAGGAGCCTTTAATTGTATC TAAACAGCTTGATACCGATAGTTGCGCCGACAATGACAACAACCATCGCCCACGCATAACCGATATATTC CCAAAAAAAAAGGCTCCAAAAGGAGCCTTTAATTGTATC TAAACAGCTTGATACCGATAGTTGCGCCGACAATGACAACAACCATCGCCCACGCATAACCGATATATTC CCAAAAAAAAGGCTCCAAAAGGAGTCTTTAATTGTATC TAAACAGCTTGATACCGATAGTTGCGCCGACAATGACAACAACCATCGCCCACGCATAACCGATATATTC CCAAAAAAAGGCTCCAAAAGGAGCCTTTAATTGTATC TAAACAGCTTGATACCGATAGTTGCGCCGACAATGACAACAACCATCGCCCACGCATAACCGATATATTC CCAAAAAAAAAGGCTCCAAAAGGAGCCTTTAATTGTATC TAAACAGCTTGATACCGATAGTTGCGCCGACAATGACAACAACCATCGCCCACGCATAACCGATATATTC CCAAAAAAAAAGGCTCCAAAAGGAGCCTTTAATTGTATC TAAACAGCTTGATACCGATAGATGCGCCGACAATGACAACAACCATCGCCCACGCATAACCGATATATTC CAGCATTAGGAGCCGGCTGATGAGAGTGAGAATAGAAA CCAAAAAAAAAGGCTCCAAAAGGAGCCTTTAATTGTATC TAAACAGCTTGATACCGATAGTTGTGCCGACAATGACAACAACCATCGCCCACGCATAACCGATATATTC
我尝试的是读取文件并获取所有序列的列表作为字符串,去掉空格和换行符之类的东西。启动一个定义了密码子使用的函数,并以三个字母的方式遍历每个序列的序列列表,将它们翻译成字典中密码子定义的氨基酸。
到目前为止我得到的代码:
input_file = 'inserts.txt'
with open(input_file, 'r') as f:
seq = f.readlines()
seq = [s.replace(" ", "").replace(",", "").replace("'", "").replace("\n", "") for s in seq]
print("\n".join(seq[:99]))
print("\nType lookup", type(seq))
# translation function and NNN codon table as a dict object
def translate(seq):
nnn_table = {'TTT': 'F', 'TCT': 'S', 'TAT': 'Y', 'TGT': 'C', 'TTC': 'F', 'TCC': 'S', 'TAC': 'Y', 'TGC': 'C',
'TTA': 'L',
'TCA': 'S', 'TAA': '*', 'TGA': '*', 'TTG': 'L', 'TCG': 'S', 'TAG': '*', 'TGG': 'W', 'CTT': 'L',
'CCT': 'P',
'CAT': 'H', 'CGT': 'R', 'CTC': 'L', 'CCC': 'P', 'CAC': 'H', 'CGC': 'R', 'CTA': 'L', 'CCA': 'P',
'CAA': 'Q',
'CGA': 'R', 'CTG': 'L', 'CCG': 'P', 'CAG': 'Q', 'CGG': 'R', 'ATT': 'I', 'ACT': 'T', 'AAT': 'N',
'AGT': 'S',
'ATC': 'I', 'ACC': 'T', 'AAC': 'N', 'AGC': 'S', 'ATA': 'I', 'ACA': 'T', 'AAA': 'K', 'AGA': 'R',
'ATG': 'M',
'ACG': 'T', 'AAG': 'K', 'AGG': 'R', 'GTT': 'V', 'GCT': 'A', 'GAT': 'D', 'GGT': 'G', 'GTC': 'V',
'GCC': 'A',
'GAC': 'D', 'GGC': 'G', 'GTA': 'V', 'GCA': 'A', 'GAA': 'E', 'GGA': 'G', 'GTG': 'V', 'GCG': 'A',
'GAG': 'E',
'GGG': 'G'}
# two loops, outer one to loop over the list of string sequences
# inner one loops over each sequence
nnn_aa_seq = []
# generate amino acid sequence
# add option for sequence or codon not divisible by three
print("\nStarting to translate:")
for dna in seq:
protein_seq = ""
for i in range(0, len(dna), 3):
if len(dna) % 3 == 0:
nnn_codon = nnn_table[dna[i:i + 3]]
protein_seq += nnn_codon
nnn_aa_seq.append(protein_seq)
return "".join(nnn_aa_seq)
translate_nnn = translate(seq)
print(tranlate_nnn)
# do other stuff
现在我想要的输出将是原始文本文件中每个 DNA 序列的每个氨基酸序列的列表。
我得到的“输出”是这样的:
Starting to translate
**T*TA*TA**TA*Y*TA*YR*TA*YR**TA*YR*L*TA*YR*LR*TA*YR*LRR*TA*YR*LRRQ*TA*YR*LRRQ**TA*YR*LRRQ*Q*TA*YR*LRRQ*QQ*TA*YR*LRRQ*QQP*TA*YR*LRRQ*QQPS*TA*YR*LRRQ*QQPSP*TA*YR*LRRQ*QQPSPT*TA*YR*LRRQ*QQPSPTH*TA*YR*LRRQ*QQPSPTHN*TA*YR*
我对这个问题的猜测是某些序列不能被三整除。对于这些序列,我认为最好移除突出部分或将其替换为占位符。大家觉得呢?
编辑:
好吧,我忘了实际打印结果,这看起来不像我想象的那样。它是一个不可区分的氨基酸系,而不是每个 DNA 序列的氨基酸序列列表。无论如何我的问题仍然存在。欢迎帮助和任何批评!
【问题讨论】:
-
这个我完全不熟悉,但是
exit code 0通常表示程序终止成功? -
如果在末尾添加
print(translate_nnn)会怎样? -
对了,忘记了,我编辑了帖子。
标签: python translation bioinformatics