Package obitools :: Module fasta
[hide private]
[frames] | no frames]

Source Code for Module obitools.fasta

 1  from obitools import bioSeqGenerator,BioSequence 
 2  from obitools.align import alignmentReader 
 3   
4 -def parseFasta(seq):
5 title = seq[0].strip()[1:].split(None,1) 6 id=title[0] 7 if len(title) == 2: 8 field = title[1].split('; ') 9 else: 10 field=[] 11 info = dict(x.split('=') for x in field if '=' in x) 12 definition = ' '.join([x for x in field if '=' not in x]) 13 seq=(''.join([x.strip() for x in seq[1:]])) 14 return bioSeqGenerator(id, seq, definition,**info)
15
16 -def fastaIterator(file):
17 if isinstance(file,str): 18 file = open(file,'ru') 19 seq=[] 20 for ligne in file: 21 if ligne[0]=='>' and seq: 22 yield parseFasta(seq) 23 seq=[] 24 seq.append(ligne) 25 26 yield parseFasta(seq)
27
28 -def writeFasta(data):
29 if isinstance(data, BioSequence): 30 data = [data] 31 rep = [] 32 for sequence in data: 33 seq = str(sequence) 34 frgseq = '\n'.join([seq[x:x+60] for x in xrange(0,len(seq),60)]) 35 info='; '.join(['%s=%s' % x for x in sequence._info.items()]) 36 title='>%s %s %s' %(sequence.id,info,sequence.definition) 37 rep.append("%s\n%s" % (title,frgseq)) 38 return '\n'.join(rep)
39
40 -def fastaAligmentReader(file):
41 return alignmentReader(file,fastaIterator)
42