Я хочу сделать три вещи:Найти строку и его расположение в файле
1) Print out the ID for each sequence
2) Find a particular motif in a sequence, print it out if it exists
3) Print out the index location for the motif in the sequence
Sequence.fasta пример файла:
>sp|Q12955|ANK3_HUMAN Ankyrin-3 OS=Homo sapiens GN=ANK3 PE=1 SV=3
MAHAASQLKKNRDLEINAEEEPEKKRKHRKRSRDRKKKSDANASYLRAARAGHLEKALDY
IKNGVDINICNQNGLNALHLASKEGHVEVVSELLQREANVDAATKKGNTALHIASLAGQA
>sp|Q16659|MK06_HUMAN Mitogen-activated protein kinase 6 OS=Homo sapiens GN=MAPK6 PE=1 SV=1
MAEKFESLMNIHGFDLGSRYMDLKPLGCGGNGLVFSAVDNDCDKRVAIKKIVLTDPQSVK
HALREIKIIRRLDHDNIVKVFEILGPSGSQLTDDVGSLTELNSVYIVQEYMETDLANVLE
QGPLLEEHARLFMYQLLRGLKYIHSANVLHRDLKPANLFINTEDLVLKIGDFGLARIMDP
>sp|Q7Z7A1|CNTRL_HUMAN Centriolin OS=Homo sapiens GN=CNTRL PE=1 SV=2
MKKGSQQKIFKHLQQPSSSHSPIPSSMSNMRSRSLSPLIGSETLPFHSGGQWCEQVEIAD
ENNMLLDYQDHKGADSHAGVRYITEALIKKLTKQDNLALIKSLNLSLSKDGGKKFKYIEN
LEKCVKLEVLNLSYNLIGKIEKLDKLLKLRELNLSYNKISKIEGIENMCNLQKLNLAGNE
В этом файле я хочу найти следующие мотивы (может быть несколько же мотивы в сл.) в качестве примера:
MAH..S
KK..D
FES.MN
K..QQ
Таким образом, вывод должен быть:
ID = Q12955
Motif = MAH..S
Location =[0] to [4]
Motif = KK..D
Location = [8] to [12]
ID = Q16659
Motif = FES.MN
Location = [4] to [9]
ID = Q7Z7A1
Motif = K..QQ
Location = [1] to [6]
Location = [10] to [14]
код до сих пор:
Чтобы найти ID:
f=open('pr_seq.fasta','r')
for idLine in f:
if '>' in idLine:
lineSplit = idLine.split('|')
ID = lineSplit[1]
print ID
Чтобы найти мотивы в последовательности:
f=open('pr_seq.fasta','r')
pr=[]
for motLine in f:
if motLine[0]=='>':
pr=motLine.split("\n")[1]
else:
try:
pr+=motLine.strip()
except:
pr+=motLine.strip()
print ("PROTEIN SEQUENCE")
print
print (pr)
print
Чтобы найти местоположение индекса для мотивов:
motif= ['N.E.K..N', 'N.Y....E', 'S...D.PL', 'S..SS','S.S..S', 'F.FP']
indices=len(pr)
index=0
for a in motif:
if re.findall(a,pr):
print a
mi = pr.index(a)
Думаю, было бы полезно, если бы вы упростили свой пример. Разрывы строк рассматриваются как пробелы? В противном случае вы можете просто использовать grep. В противном случае я бы выполнил реализацию алгоритма Кнута-Морриса-Прата. –
В файле sequence.fasta нет пробелов или разрывов строк. –
Итак, почему вы добавили разрывы строк в свой пример? –