Я пытаюсь изменить последовательность ДНК

Я пытался изменить комплемент последовательности ДНК фаста. Вот мой код:

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']

Как я могу преодолеть эту проблему? Я просто хочу добавить, что я серьезно начал программировать на python всего 2 месяца назад, поэтому я все еще учусь и совершенствуюсь. Спасибо!

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

Другие вопросы по тегам