比较文件内部字母序列的最佳方法?

pso*_*res 2 python

我有一个文件,有很多字母序列.
其中一些序列可能相同,所以我想比较它们,所有这些.
我正在做这样的事情,但这并不是我想要的:

for line in fl:
line = line.split()
for elem in line:
    if '>' in elem:
        pass
    else:
        for el in line:
            if elem == el:
                print elem, el
Run Code Online (Sandbox Code Playgroud)

文件示例:

>1
GTCGTCGAAGCATGCCGGGCCCGCTTCGTGTTCGCTGATA  
>2
GTCGTCGAAAGAGGTCT-GACCGCTTCGCGCCCGCTGGTA    
>3
GTCGTCGAAAGAGGCTT-GCCCGCCACGCGCCCGCTGATA  
>4
GTCGTCGAAAGAGGCTT-GCCCGCTACGCGCCCCCTGATA  
>5
GTCGTCGAAAGAGGTCT-GACCGCTTCGCGCCCGCTGGTA  
>6
GTCGTCGAAAGAGTCTGACCGCTTCTCGCCCGCTGATACG  
>7
GTCGTCGAAAGAGGTCT-GACCGCTTCTCGCCCGCTGATA
Run Code Online (Sandbox Code Playgroud)

所以我想知道如果任何序列完全等于1,或者等于2,依此类推.

小智 8

如果目标是简单地将类似的序列组合在一起,那么简单地对数据进行排序就可以了.这是一个解决方案,使用BioPython解析输入FASTA文件,对序列集合进行排序,使用标准Python itertools.groupby函数合并相同序列的ID,并输出新的FASTA文件:

from itertools import groupby
from Bio       import SeqIO

records = list(SeqIO.parse(file('spoo.fa'),'fasta'))

def seq_getter(s): return str(s.seq)
records.sort(key=seq_getter)

for seq,equal in groupby(records, seq_getter):
  ids = ','.join(s.id for s in equal)
  print '>%s' % ids
  print seq
Run Code Online (Sandbox Code Playgroud)

输出:

>3
GTCGTCGAAAGAGGCTT-GCCCGCCACGCGCCCGCTGATA
>4
GTCGTCGAAAGAGGCTT-GCCCGCTACGCGCCCCCTGATA
>2,5
GTCGTCGAAAGAGGTCT-GACCGCTTCGCGCCCGCTGGTA
>7
GTCGTCGAAAGAGGTCT-GACCGCTTCTCGCCCGCTGATA
>6
GTCGTCGAAAGAGTCTGACCGCTTCTCGCCCGCTGATACG
>1
GTCGTCGAAGCATGCCGGGCCCGCTTCGTGTTCGCTGATA
Run Code Online (Sandbox Code Playgroud)