2016-08-08 3 views
1

Я пишу программу, которая анализирует последовательности аллелей. Я написал код, который читает файл и создает массив заголовков и массив последовательностей. Ниже приведен пример файла:Сделать новый массив

>DQB1*04:02:01 
------------------------------------------------------------ 
--ATGTCTTGGAAGAAGGCTTTGCGGAT-------CCCTGGAGGCCTTCGGGTAGCAACT 
GTGACCTT----GATGCTGGCGATGCTGAGCACCCCGGTGGCTGAGGGCAGAGACTCTCC 
CGAGGATTTCGTGTTCCAGTTTAAGGGCATGTGCTACTTCACCAACGGGACCGAGCGCGT 
GTTGGAGCTCCGCACGACCTTGCAGCGGCGA----------------------------- 
---GTGGAGCCCACAGTGACCATCTCCCCATCCAGGACAGAGGCCCTCAACCACCACAAC 
CTGCTGGTCTGCTCAGTGACAG----CATTGGAGGCTTCGTGCTGGGGCTGATCTTCCTC 
GGGCTGGGCCTTATTATC--------------CATCACAGGAGTCAGAAAGGGCTCCTGC 
ACTGA------------------------------------------------------- 
>OMIXON_CONSENSUS_M_155_09_4890_DQB1*04:02:01 
-------------------ATCAGGTCCAAGCTGTGTTGACTACCACTACTTTTCCCTTC 
GTCTCAATTATGTCTTGGAAGAAGGCTTTGCGGATCCCTGGAGGCCTTCGGGTAGCAACT 
GTGACCTTGATGCTGGCGATGCTGAGCACCCCGGTGGCTGAGGGCAGAGACTCTCCCGGT 
AAGTGCAGGGCCACTGCTCTCCAGAGCCGCCACTCTGGGAACAGGCTCTCCTTGGGCTGG 
GGTAGGGGGATGGTGATCTCCATGATCTCGGACACAATCTTTCATCAACATTTCCTCTCT 
TTGGGGAAAGAGAACGATGTTGCATTCCCATTTATCTTT--------------------- 
>GENDX_CONSENSUS_M_155_09_4890_DQB1*04:02:01 
TGCCAGGTACATCAGATCCATCAGGTCCAAGCTGTGTTGACTACCACTACTTTTCCCTTC 
GTCTCAATTATGTCTTGGAAGAAGGCTTTGCGGATCCCTGGAGGCCTTCGGGTAGCAACT 
GTGACCTTGATGCTGGCGATGCTGAGCACCCCGGTGGCTGAGGGCAGAGACTCTCCCGGT 
AAGTGCAGGGCCACTGCTCTCCAGAGCCGCCACTCTGGGAACAGGCTCTCCTTGGGCTGG 
GGTAGGGGGATGGTGATCTCCATGATCTCGGACACAATCTTTCATCAACATTTCCTCTCT 

Заголовки являются («> DQB1», «> GENDX», и «> OMIXON») и три последовательности имеют другие три строки, как показано выше.

Следующая часть моего кода определяет, является ли последовательность аллелей полной или неполной. Аллель определяется как «неполный», если в последовательности> DQB1 имеется более 4 разрывов. (Разрыв обозначается символом '-'). Например, описанная выше последовательность прерывается, так как существует пять разрывов.

Я пытаюсь написать код, если обнаружено неполное обнаружение аллеля, программа создает новый массив только с заголовками и последовательностями> GENDX и> OMIXON.

Как создать массив, который не включает в себя> DQB1?

Вот мой код, как это:

import sys, re 

max_num_breaks=4 
filename=sys.argv[1] 
f=open(filename,"r") 
header=[] 
header2=[] 
sequence=[] 
sequence2=[] 
string="" 
for line in f: 
    if ">" in line and string=="": 
     header.append(line[:-1]) 
    elif ">" in line and string!="": 
     sequence.append(string) 
     header.append(line[:-1]) 
     string="" 
    else: 
     string=string+line[:-1] 
sequence.append(string) 
s1=sequence[0] 
breaks=sum(1 for m in re.finditer("-+",''.join(s1.splitlines()))) 
if breaks>max_num_breaks: 
    print "Incomplete Reference Allele Detected" 
    for m in range(len(header)): 
     if re.finditer(header[m], 'OMIXON') or re.finditer(header[m], 'GENDX'): 
      header2.append(header[m]) 
      sequence2.append(sequence[m]) 
    print header2 

Проблема с выше кода является то, что всякий раз, когда я печатаю header2 он все еще включает в себя DQB1.

ответ

2

Почему вы хотите использовать re.finditer?

насчет

if header[m].find('OMIXON') > -1 or header[m].find('GENDX') > -1: 
0

Вы можете сделать это очень легко с помощью Biopython, предполагая, что ваши последовательности сохраняются в файле FASTA.

from Bio import SeqIO 

headers = [record.id for record in SeqIO.parse("myfile.fasta", "fasta")][1:] 

и все готово.

Если вы хотите получить часть последовательности из объекта parse(), просто используйте record.seq.

+0

Первоначально я написал код с biopython и имел много проблем, так что я понял, как это сделать без него. –

+0

@GiaConstantina Какие проблемы у вас были? – MattDMo

+0

Я не думаю, что он правильно скачал bc, в общем, он не позволит мне получить доступ к таким вещам, как SeqIO и другие библиотеки. –

0

Функция re.finditer не работает так, как вы думаете. Например, см. here.

Я бы рекомендовал использовать вместо этого:

if header[m][1:7] == 'OMIXON' or header[m][1:6]=='GENDX':