2015-07-08 3 views
1

Я пытаюсь добавить более 70000 новых функций в файл genbank с использованием biopython.Улучшить добавление функции genbank

У меня есть этот код:

from Bio import SeqIO 
from Bio.SeqFeature import SeqFeature, FeatureLocation 

fi = "myoriginal.gbk" 
fo = "mynewfile.gbk" 

for result in results: 
    start = 0 
    end = 0 

    result = result.split("\t") 
    start = int(result[0]) 
    end = int(result[1]) 

    for record in SeqIO.parse(original, "gb"): 
     record.features.append(SeqFeature(FeatureLocation(start, end), type = "misc_feat")) 
     SeqIO.write(record, fo, "gb") 

Результаты просто список списков, содержащих начало и конец каждой из функций, мне нужно добавить в исходный файл GBK.

Это решение является чрезвычайно дорогостоящим для моего компьютера, и я не знаю, как улучшить производительность. Любая хорошая идея?

+0

Что такое 'results' в ваш код? Кроме того, для того, что я вижу, очень дорого разбирать 'оригинал' каждой итерации внутри цикла for' SeqIO.parse (original, "gb") '. Под «оригиналом» вы подразумеваете переменную 'fi'? – cnluzon

ответ

1

Вы должны разобрать файл genbank только один раз. Опуская, что results содержит (я не знаю точно, потому что есть некоторые недостающие части кода в вашем примере), я предположил бы, что-то вроде этого может улучшить производительность, модифицируя код:

fi = "myoriginal.gbk" 
fo = "mynewfile.gbk" 

original_records = list(SeqIO.parse(fi, "gb")) 

for result in results: 
    result = result.split("\t") 
    start = int(result[0]) 
    end = int(result[1]) 

    for record in original_records: 
     record.features.append(SeqFeature(FeatureLocation(start, end), type = "misc_feat")) 
     SeqIO.write(record, fo, "gb") 
+1

Это улучшило производительность. По умолчанию это медленный процесс, но теперь он доступен по цене. Большое спасибо – Mastodon

+1

Без проблем @ Мастодон, рад помочь :) – cnluzon