2017-02-19 4 views
0

Ich habe versucht, eine Fasta-DNA-Sequenz umzukehren. Hier ist mein Code:Ich versuche, eine Fasta-DNA-Sequenz umzukehren

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 

Und jedes Mal, wenn ich die Ausgabe zu erhalten, ist dies keine gültige Nukleotid, auch wenn mein Druck der Einträge zeigt, dass es die Elemente in Folge hat. Hier ist ein Beispiel der Ausgabe, wenn ich Enteries drucke;

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

Wie kann ich dieses Problem überschreiben? Ich möchte nur hinzufügen, dass ich erst vor 2 Monaten angefangen habe, ernsthaft mit Python zu programmieren, also lerne und verbessere ich immer noch. Vielen Dank!

Antwort

1

Ihre Schleife-Anweisung lautet:

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

Dadurch wird die Länge der Einträge iterieren, das heißt, 0, 1, 2, 3, ..., len(entries).

Wenn Sie if index != sequence tun, vergleichen Sie tatsächlich eine ganze Zahl mit einer Liste, sagen if 3 != ['A', 'C', 'T', 'G']. Ich nehme an, Sie können sehen, dass das keinen Sinn macht. Was Sie wahrscheinlich tun möchten, ist zu sehen, ob das Nukleotid in der Sequenz ein gültiges Nukleotid ist, daher ist es in der sequence Liste. Sie können es wie folgt tun:

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

Lassen Sie mich zwei Dinge sagen:

  • erste, Sie müssen nicht zu len(entries[::-1]) reichen, ist es das gleiche wie len(entries)

  • Zweitens, und noch wichtiger, gibt es ein spezielles Modul speziell für die Bioinformatik. Es heißt Biopython. Es hat spezielle Objekte und Funktionen. Zum Beispiel könnte das Problem gelöst werden, wie folgt:

-

from Bio.Seq import Seq 

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

Ausgang:CTATCGGGCACCCTTTCAGCGGCCCATTACAATGGCCAT

+0

Vielen Dank für Ihre Unterstützung. Ich bin mit der Mehrheit der biopython-Module nicht so vertraut, aber seq erfordert, dass ich eine Folge von Nukleotidsequenzen einfüge, wobei ich in meinem Fall eine Fasta-Sequenz aus einer Datei als Eingabe verwenden möchte. –

+0

@KachiNwogu Sie können Ihre Fasta-Datei mit Python lesen! –

Verwandte Themen