#! /usr/bin/env python def begin(aseq,otherseq): #---------------функция устанавливает абсолютный ноль выравнивания и определяет откуда начинается каждое из A--------------- #ищем самую длинную из A и ставим ее начало за абсолютный ноль ashort = [] max = 0 for i in range(len(aseq)): ashort.append('') for j in range(len(aseq[i][1])): if aseq[i][1][j]!='-': ashort[i]+=aseq[i][1][j] if len(ashort[i])>len(ashort[max]): max = i #найдем индекс вхождения каждой из A в Amax - начальную координату вычислим start=[] for i in range(len(aseq)): start.append(ashort[max].index(ashort[i])) #добавим гэпы в начало for i in range(len(aseq)): aseq[i][1] = '-'*start[i]+aseq[i][1] otherseq[i][1] = '-'*start[i]+otherseq[i][1] ashort[i] = '-'*start[i]+ashort[i] #теперь промежуточные гэпы #сначала найдем максимально длинную последовательность maxfull = 0 for i in range(len(aseq)): if len(aseq[i][1])>len(aseq[maxfull][1]): maxfull=i #затем проходим по всем индексам n n = len(aseq[maxfull][1]) adds=[0]*len(aseq) i=0 while in: n=len(aseq[j][1]) if len(aseq[j][1])<=i: aseq[j][1]=aseq[j][1]+'-' otherseq[j][1]=otherseq[j][1]+'-' elif aseq[j][1][i]=='-' and start[j]+adds[j]i: adds[k]+=1 aseq[k][1]=aseq[k][1][:i]+'-'+aseq[k][1][i:] otherseq[k][1]=otherseq[k][1][:i]+'-'+otherseq[k][1][i:] break i+=1 return(aseq,otherseq) print("Эта программа обрабатывает результаты выравнивания структур в Pymol для 3+ последовательностей") print("Выравнивания A с B и A c С преобразовываются в ABC выравнивание") print("Название входного файла:") file = open(input(), 'r') print("Название выходного файла:") output = open(input(), 'w') aseq = [] otherseq = [] #получаем последовательности for line in file: anal = line.strip() if anal in "0123456789": aseq.append([file.readline().strip(), file.readline().strip()]) otherseq.append([file.readline().strip(), file.readline().strip()]) ansa, ansother = begin(aseq,otherseq) output.write(ansa[0][0]+'\n') output.write(ansa[0][1]+'\n') for i in range(len(ansa)): output.write(ansother[i][0]+'\n') output.write(ansother[i][1]+'\n') #print(*ansa) #print("************************************************************************") #print(*ansother) file.close() output.close()