2016-10-12 3 views
0

Wie finden Sie nur den ersten start_codon für jeden Rahmen. In dem Code unten gibt es mir alle start_codon Position.Finden und drucken Sie nur den ersten ORF in fasta

from Bio.SeqRecord import SeqRecord 
from Bio import SeqIO 
def test(seq, start, stop): 
    start = ["ATG"] 
    start_codon_index = 0 
    for frame in range(0,3): 
     for i in range(frame, len(seq), 3): 
      current_codon = seq[i:i+3]        
      if current_codon in start: 
       start_codons.append(start_codon_index) 
    return start_codons 

f = open("a.fa","r") 
start = ["ATG"] 
for record in SeqIO.parse(f,"fasta"): 
    seq=record.seq 
    name=record.id 
    start_codons=test(seq, start, stop) 
    print name, start_codons 
+0

Was ist Ihre Frage? – Humbalan

Antwort

1

Wenn Sie einen DNA-String haben und Sie das erste Auftreten eines „ATG“ -Sequenz zu finden, ist die am einfachsten zu tun, nur:

DNA = "ACCACACACCATATAATGATATATAGGAAATG" 

print(DNA.find("ATG")) 

Druckt 15, beachten Sie, dass die Indizierung in python von 0

im Fall beginnt betrachten Sie Nucleotidtripletts auch:

DNA = "ACCACACACCATATAATGATATATAGGAAATG" 
for i in range(0, len(DNA), 3): 
    if DNA[i:i+3] == "ATG": 
     print(i) 
     break 

Gibt auch 15 zurück.

+0

danke, aber es ist nicht so einfach, da ich 3 Frames betrachten muss, das heißt in Frame 1, dauert es Triplets beginnend von Pos0, in Frame 2, von Pos1 und Frame 3 von Pos2, jedes Mal die Triplets ändern. OK, ich habe für Frame im Bereich (0,3) hinzugefügt. Was, wenn ich es wie Namen drucken möchte (start1, start2, start3)? – user3224522

+0

Wenn Sie alle Startpositionen benötigen, lassen Sie einfach die 'break' fallen –

+0

Nein ... Ich habe nur 3 Startposition für jeden Rahmen ... mein Code oben gibt mir alle Position. OK, ich habe es gelöst. Vielen Dank – user3224522

Verwandte Themen