2016-09-07 2 views
0

Ich bin ein Anfänger Python-Programmierer mit einer Suchfrage. Ich muss eine DNA-Kette in einer DNA-Datei finden. Das Problem ist, dass ich nicht weiß, wo die Zeichenfolge in der Datei erscheint, es erscheint zweimal, und ich muss beide Standorte kennen. Mein aktuelles Programm kann nur die erste Saite finden und ich habe Schwierigkeiten, die Suche fortzusetzen, um die zweite zu finden. Meine zwei Ideen, die ich habe, sind beide gescheitert, aber ich denke nur, weil ich nicht verstehe, wie man die Funktionen benutzt. Hier sind sie:Datei für die gleiche Zeichenfolge zweimal suchen und beide separat drucken

  1. Verwendung .Seek(), um die erste Folge von DNA zu finden, ich brauche und festgelegt, dass als Ausgangspunkt für eine zweite Suche. Mein Problem ist, dass ich nicht genau weiß, wo die DNA-Stränge sind, also habe ich versucht, meinen Suchort auf die DNA-Kette zu setzen. Dies funktioniert jedoch nicht, da die Daten in Bytes vorliegen müssen, um einen Ort und keine Zeichenfolge zu finden. Ich habe versucht, .index() die Position der DNA-Kette zu verwenden und diese als Variable zu setzen, aber das funktioniert auch nicht.

  2. Verwenden Sie .split(), um die DNA-Textdatei zu splitten, nachdem die erste DNA-Kette gefunden wurde, und führen Sie dann eine zweite Suche in der rechten Hälfte der Pause durch. Ich dachte, das würde funktionieren, aber ich nur mit einem Fehler beim Lesen am Ende:

    Indexerror: Listenindex außerhalb des zulässigen Bereichs

gesagt, ich .split schreibe (‚str‘) [1] zu Verwende die zweite Hälfte der Zeichenfolge.

Angenommen, meine Logik ist im Programm korrekt, würden diese Ansätze funktionieren? Hat jemand eine andere Idee, an die ich denken sollte, dass ich es versuchen sollte?

+2

Willkommen bei Stackoverflow. Würden Sie posten, wie Ihre Such- und Split-Methoden verwendet werden? Und haben Sie schreiben und teilen oder sind sie Teil einer bestehenden API (Bioinformatik oder anders)? (Wenn der erste, bitte posten Sie sie. Wenn letzterer, bitte sagen Sie uns den Namen der Bibliothek.) – rajah9

Antwort

0

Wie groß ist Ihre Datei? Wenn es nicht untragbar lang ist, könnten Sie den naiven Ansatz verwenden:

file = open("filename.text", r) 
genome = file.read() 
file.close() 
genome_length = len(genome) 
pattern = "ATCT" #or whatever your pattern is 
pattern_length = len(pattern) 
pattern_locations = [] 
for i in range(genome_length - pattern_length - 1): 
    if pattern == genome[i:i+pattern_length]: 
     pattern_locations.append(i) 
return pattern_locations 

Wenn jedoch das Genom ist lang, dann wäre es erfordern komplexere Algorithmen, um in einer angemessenen Zeit (wie die Konstruktion eines Suffix-Baum suchen)

2

Ich lese dein Problem als "Ich versuche, die Standorte einer DNA-Subsequenz zu finden." Stellt das folgende Beispiel dar, was Sie erreichen möchten? Lassen Sie es mich wissen, wenn ich Ihre Frage zu sehr vereinfache und ich überarbeiten kann.

>>> import re 
>>> dna = 'AGTCTCCCGGATTTGGATTTAA' #super short, but just for proof of concept 
>>> subseq = 'ATTT' #sequence you want to find within dna 
>>> for location in re.finditer(subseq, dna): 
...  print 'start: %d end: %d' % (location.start(), location.end()) 

start: 10 end: 14 
start: 16 end: 20 
Verwandte Themen