2016-08-31 10 views
0

У меня есть огромный файл fasta, но мне нужно извлечь только его часть, если я знаю координату начальной и конечной пары пар моей последовательности. Кроме того, он должен быть в формате fasta с длиной 60 б.п. на строку. Это моя попытка, пожалуйста, дайте мне знать, если посмотрите ОК, и любые предложения по ее улучшению приветствуются.Извлечь часть последовательности fasta на основе координат bp

from Bio import SeqIO 

inFile = open('full_chr.fa','r') 
fw=open("part.fa",'w') 
line_width = 60 
for record in SeqIO.parse(inFile,'fasta'): 
    fw.write(">" + record.id + "\n") 
    fww = (str(record.seq[600130000:602000000]) + '\n') 
    for i in xrange(0,len(fww),line_width): 
     fw.write(str(fww[i:i+line_width]) + '\n') 
fw.close() 
+0

формат FASTA не ограничивается длиной 60bp на линии –

+0

да, но для меня, чтобы открыть его в Gedit, лучше использовать длину 60 п.о., иначе он не откроет его. – user3224522

+0

Я рекомендовал bedtools getfasta http://bedtools.readthedocs.io/en/latest/content/tools/getfasta.html –

ответ

2

Это так же просто, как:

from Bio import SeqIO 


record = SeqIO.read("Chromosome.fas", "fasta") 

with open("output.fas", "w") as out: 
    SeqIO.write(record[100:500], out, "fasta") 

SeqIO.write уже использует 60 символов длины упаковки. Если вы хотите манипулировать оберткой строки, используйте объект FastaWriter. Это пример для 80 п.н. линий:

from Bio import SeqIO 
from Bio.SeqIO.FastaIO import FastaWriter 


record = SeqIO.read("Chromosome.fas", "fasta") 

with open("output.fas", "w") as out: 
    writer = FastaWriter(out, wrap=80) 
    writer.write_header() 
    writer.write_record(record[100:500]) 
    writer.write_footer() 
+0

мой сценарий выше дает тот же результат, что и ваш, но ваш проще и приятнее;) спасибо – user3224522