我试图逆转fasta DNA序列的补体

时间:2017-02-19 08:28:05

标签: python reverse fasta dna-sequence complement

我一直试图逆转fasta DNA序列的补体。这是我的代码:

fastafile=open('sequence (3).fasta','r')
entries=[]
reverse=""
sequence=['A','T','G','C','N']
for line in fastafile:
    if not line.startswith('>'):
        line = line.split()
        entries.append(line)
print entries
for index in range(0,len(entries[::-1])):
    if index !=sequence:
        print "this is not a valid nucleotide"
        break
    else:
        if index=='A':
            reverse+='T'
        elif index=='T':
            reverse+='A'
        elif index=='C':
            reverse+='G'
        elif index=='G':
            reverse+ 'C'
        elif index=='N':
            reverse+='N'
print reverse

每次我得到输出,这都不是一个有效的核苷酸,即使我的条目打印显示它有序列中的项目。这是我打印肠衣时的输出样本;

[['GCTCCCCTGAGGTTCGGCACCCACACTCCCTTCCCAGGAGCTCGCGATGCAAGAGCCACAGTCAGAGCTC'], ['AATATCGACCCCCCTCTGAGCCAGGAGACATTTTCAGAATTGTGGAACCTGCTTCCTGAAAACAATGTTC'], ['TGTCTTCGGAGCTGTGCCCAGCAGTGGATGAGCTGCTGCTCCCAGAGAGCGTCGTGAACTGGCTAGACGA']

如何覆盖此问题?我只是想补充一点,我大约2个月前才开始认真地使用python进行编程,所以我仍在学习和改进。 谢谢!

1 个答案:

答案 0 :(得分:1)

你的循环语句是:

for index in range(0,len(entries[::-1])):

这将迭代条目的长度,即0, 1, 2, 3, ..., len(entries)

执行if index != sequence时,实际上是将整数与列表进行比较,例如if 3 != ['A', 'C', 'T', 'G']。我假设你可以看到没有意义。您可能想要做的是查看序列中的核苷酸是否是有效的核苷酸,因为它位于sequence列表中。你可以这样做:

if entries[::-1][index] in sequence # Will be true if the nucleotide at entries[::-1][index] is inside sequence

让我说两件事:

  • 首先,您不必将范围设为len(entries[::-1]),它与len(entries)相同

  • 其次,更重要的是,有一个专门用于生物信息学的实际模块构建。它被称为Biopython。它有特殊的对象和功能。例如,您的问题可以解决如下:

-

from Bio.Seq import Seq

dna = Seq("ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG")
print dna.reverse_complement()

输出: CTATCGGGCACCCTTTCAGCGGCCCATTACAATGGCCAT