2014-10-16 5 views
1

저는 파이썬을 처음 접했고 파이썬에서 Fasta 파일로부터 동일한 시퀀스를 찾는 법을 알고 싶습니다. 예를 들어 여기에 4 개의 레코드 시퀀스 읽기가 있는데, 동일한 시퀀스를 찾고 해당 ID를 반환하는 방법은 무엇입니까? 대단히 감사합니다 !!파이썬에서 동일한 시퀀스를 찾는 법

from Bio import SeqIO 
record=list(SeqIO.parse("data/dna.txt", "fasta")) 
for i in range(0,len(record)): 
    print record[i].id,record[i].seq 


seq1 GAATGCATACTGCATCGATA 
seq2 CATAAAACGTCTCCATCGCT 
seq3 TGCCCAAGTTGTGAAGTGTC 
seq4 TGCCCAAGTTGTGAAGTGTC 
+0

ID가 여기 seqx 무엇처럼

from Bio import SeqIO records = list(SeqIO.parse("data/dna.txt", "fasta")) d = dict() for record in records: if record.seq in d: d[record.seq].append(record) else: d[record.seq] = [record] for seq, record_set in d.iteritems(): print seq + ': (' + str(len(record_set)) + ')' for record in record_set: print ' ' + record.id 

인쇄? –

+1

2 개의 시퀀스가 ​​같은지 테스트 할 수있는 방법이나 가능한 모든 쌍을 검색하는 방법 등 다른 문제가 있습니까? –

+1

모호성을 없애기 위해 일부 (작은) 샘플 입력과 해당 입력에 해당하는 출력을 표시하십시오. – John1024

답변

1

:

from Bio import SeqIO 
from collections import defaultdict 
records=list(SeqIO.parse("data/dna.txt", "fasta")) 
compilation = defaultdict(list) 
for record in records: 
    compilation[record.seq].append(record.id) 
+0

+1에 대한 'defaultdict()'. 동일한 시퀀스의 ID를 출력하려면 :'print ("\ n".join (map, ",".join, compilation.values ​​()))'. 아마'list()'를 부를 필요는 없다. 'compilation '대신'same' name을 사용할 수 있습니다. – jfs

0

가장 쉬운 방법은 dict입니다. 당신은 너무처럼 defaultdict를 사용하여 순서에 따라 ID의 목록을 컴파일 할 수

GAATGCATACTGCATCGATA: (1) 
    seq1 
CATAAAACGTCTCCATCGCT: (1) 
    seq2 
TGCCCAAGTTGTGAAGTGTC: (2) 
    seq3 
    seq4