繁体   English   中英

我试图反向补充Fasta DNA序列

[英]I am trying to reverse complement a fasta DNA sequence

我一直在尝试反向补充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进行编程,因此我仍在学习和改进。 谢谢!

您的循环语句是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM