Wyszukiwanie wzorca
Znajdowanie wystąpień słowa – wzorca w tekście jest jednym z często podejmowanych zagadnień zarówno w redakcji tekstów jak w analizie współcześnie poznanych sekwencji biologicznych. Dane biologiczne dotyczą sekwencji nukleotydowych, aminokwasowych, czy gramatycznego opracowania tych sekwencji (gen – cistron, skrypton – operon, replicon – paragraf, segregon (chromosom)- rozdział, itd.) i mogą być one przechowywane w pliku tekstowym. Realizacja tego zadania będzie przebiegała etapami. Dla uproszczenia przyjmuje się wyszukiwanie wzorca literalnego, bez użycia wyrażeń regularnych, które z kolei będą wprowadzone w kolejnych ćwiczenia. Plik FASTA zawiera jedną sekwencję. Celem ćwiczenia jest opracowanie "naiwnego" algorytmu wyszukiwania wzorca. Algorytm ten polega na przesuwaniu okna zawierającego wzorzec nad sekwencją i sprawdzaniu, dla jakich przesunięć wszystkie symbole w okienku są zgodne z odpowiadającymi im symbolami w tekście.
Żeby odczytać plik używam/;
with open('seq1.fa', 'r') as f:
first = f.readline() # odczyt pierwszej lini
seqs = f.read() # odczyt pozostałej zawartości
#zamknięcie bloku, automatycznie zamyka plik
Mam taką sekwencję:
Seq1 [organism=Carpodacus mexicanus]
CCTTTATCTAATCTTTGGAGCATGAGCTGGCATAGTTGGAACCGCCCTCAGCCTCCTCATCCGTGCAGAA
CTTGGACAACCTGGAACTCTTCTAGGAGACGACCAAATTTACAATGTAATCGTCACTGCCCACGCCTTCG
TAATAATTTTCTTTATAGTAATACCAATCATGATCGGTGGTTTCGGAAACTGACTAGTCCCACTCATAAT
CGGCGCCCCCGACATAGCATTCCCCCGTATAAACAACATAAGCTTCTGACTACTTCCCCCATCATTTCTT
TTACTTCTAGCATCCTCCACAGTAGAAGCTGGAGCAGGAACAGGGTGAACAGTATATCCCCCTCTCGCTG
GTAACCTAGCCCATGCCGGTGCTTCAGTAGACCTAGCCATCTTCTCCCTCCACTTAGCAGGTGTTTCCTC
TATCCTAGGTGCTATTAACTTTATTACAACCGCCATCAACATAAAACCCCCAACCCTCTCCCAATACCAA
ACCCCCCTATTCGTATGATCAGTCCTTATTACCGCCGTCCTTCTCCTACTCTCTCTCCCAGTCCTCGCTG
CTGGCATTACTATACTACTAACAGACCGAAACCTAAACACTACGTTCTTTGACCCAGCTGGAGGAGGAGA
CCCAGTCCTGTACCAACACCTCTTCTGATTCTTCGGCCATCCAGAAGTCTATATCCTCATTTTAC
Dostałem taki pseudokod. Nigdy nie wyszukiwałem tekstu w pythonie i nie wiem jak się za to zabrać
S[1..n] - sekwencja
P[1..m] – wzorzec
s – położenie dopasowania wzorca
n = S.length
m = P.length
for s = 0 to n-m
if P[1..m] == S[s+1..s+m]
print "Wzorzec występuję z przesunięciem s"
Moim zadaniem jest:
- wyszukanie jakiegoś wzorca (pseudokod podałem powyżej).
Myślałem o czymś takim:
Sekwencja = input("Wpisz sekwencję")
'''lub
with open('seq1.fa', 'r') as f:
first = f.readline() # odczyt pierwszej lini
seqs = f.read() # odczyt pozostałej zawartości
S = seqs"
'''
wzorzec = input("Wpisz wzorzec")
#Nie wiem, ale chyba trzeba przerobić string na listę
S = seqs.split()
S[1:n] #sekwencja (czyli całość, te wszystkie literki)
P = input("Wpisz wzorzec")
P[1:m] #wzorzec (czyli to czego szukamy w tych literkach, np. mamy wzorzec 'TATCTAATCTTT' i on się zaczyna w sekwencji od piątej literki do szesnastej włącznie)
s = ' ' #położenie dopasowania wzorca (czyli to od której literki w sekwencji zaczyna się wzorzec, np. mamy wzorzec 'TATCTAATCTTT' i on się zaczyna w sekwencji od piątej literki do szesnastej włącznie)
n = S.length
m = P.length
x = n-m
for s = 0 to x:
if P[1:m] == S[(s+1):(s+m)]
print "Wzorzec występuję z przesunięciem s"
Ogólnie to strasznie mnie zmylił ten pseudokod i nie wiem już co napisać
2. Przerobienie tamtego kodu na trzy funkcje
a) funkcje openFASTA(fileName) otwierającą plik typu FASTA i zwracającą: identyfikator sekwencji oraz samą sekwencje.
No to tu chyba tak
def openFASTA(fileName):
with open('seq1.fa', 'r') as f:
first = f.readline() # odczyt pierwszej lini
seqs = f.read() # odczyt pozostałej zawartości
return first, seqs
b) funkcje outputFASTA(id, sequence, width, fileName), która dla podanej sekwencji wygeneruje plik typu FASTA o deklarowanej liczbie znaków w wierszu i podanej nazwie pliku.
def outputFASTA(id, sequence, width, fileName):
with open('seq1.fa', 'r') as f:
id = f.readline()
seqs = f.read
f.write(seqs + '\n')
fileName = input("Jak ma się nazywać plik")
width = int(input("Jak długi ma być plik")
c) funkcje searchPAT(sequence, pattern), zwróci położenia dopasowania wzorca do sekwencji. Nie mam pojęcia, bo nie wiem jak zrobić ten pierwszy skrypt
def searchPat(sequence, pattern):
Sekwencja = input("Wpisz sekwencję")
'''lub
with open('seq1.fa', 'r') as f:
first = f.readline() # odczyt pierwszej lini
seqs = f.read() # odczyt pozostałej zawartości
S = seqs"
'''
wzorzec = input("Wpisz wzorzec")
#Nie wiem, ale chyba trzeba przerobić string na listę
S = seqs.split()
S[1:n] #sekwencja (czyli całość, te wszystkie literki)
P = input("Wpisz wzorzec")
P[1:m] #wzorzec (czyli to czego szukamy w tych literkach, np. mamy wzorzec 'TATCTAATCTTT' i on się zaczyna w sekwencji od piątej literki do szesnastej włącznie)
s = ' ' #położenie dopasowania wzorca (czyli to od której literki w sekwencji zaczyna się wzorzec, np. mamy wzorzec 'TATCTAATCTTT' i on się zaczyna w sekwencji od piątej literki do szesnastej włącznie)
n = S.length
m = P.length
x = n-m
for s = 0 to x:
if P[1:m] == S[(s+1):(s+m)]
print "Wzorzec występuję z przesunięciem s"