У меня есть два отсортированных текстовых файла, которые содержат белковые последовательности из одинаковых 600 образцов, просто мы используем разные методы для получения последовательностей.Теперь мы хотим сравнить последовательности в обоих файлах, чтобы увидеть, согласуются ли они друг с другом.
Это выравнивание / сравнение последовательностей с высокой пропускной способностью , поэтому я хотел бы написать небольшойскрипт обрабатывает все последовательности параллельно , то есть сравнивает:
последовательность 1 в файле 1 с последовательностью 1 в файле 2,
последовательность 2 в файле 1 с последовательностью 2 в файле 2 и т. д.
И затем в конечном итоге возвращает мне результаты, независимо от того, совпадают они или нет, и дает мне% идентичность.
Каждая последовательность имеет связанный заголовок, обозначенный знаком «>», за которым следует имя образца.
file1
>Sample 1
ABCDEFG
>Sample 2
ZXCVBNM
>Sample 3
QAZWSXEDC
>Sample 4
ZXCVSDFGHNMJKL
file2
>Sample 1
ABCDEFG
>Sample 2
ZXCVBOM
>Sample 3
QAZWSXEDCF
>Sample 4
ASDFGHJK
Я хотел бы создать таблицу для отображения результатов в следующем формате:
Sample Name Seq 1 Seq 2 Mismatch % Identity
Sample 1 ABCDEFG ABCDEFG 0 100
Sample 2 ZXCVBNM ZXCVBOM 1 85.7
Sample 3 QAZRWSXED QAZWSXEDCF 2 80
Sample 4 ZXCVSDFGHNMJKL ASDFGHJK 6 42.9
Я думал сделать это следующим образом (прикрепив здесь псевдокод):
with open ('file1.txt', 'r') as infile1:
sanger = infile1.read().splitlines() # Read file1 in
with open ('file2.txt', 'r') as infile2:
ngs = infile2.read().splitlines() # Read file2 in
with open ('outfile.txt', 'w') as outfile: # Write output file
data_iter = iter(sequences)
order = ['Sample Name', 'Seq 1', 'Seq 2', 'Mismatch', '% Identity']
header = '\t'.join([k for k in order])
outfile.write(header + '\n') # Print the header information
if sanger[1] in ngs[1]:
locations = [[{'Sample Name': seq_name.strip('>'),
'Seq 1': sanger[1],
'Seq 2': ngs[1],
'Mismatch': mismatch count,
'% Identity': 100 - (mismatch count/len(sanger/ngs) * 100)}]]
for loc in chain.from_iterable(locations):
output = '\t'.join([str(loc[k]) for k in order])
outfile.write(output + '\n')
И повторить для всех 60 последовательностей.