【发布时间】:2013-06-10 04:39:37
【问题描述】:
我正在使用 Biopython 打开一个大的单项 fasta 文件(514 兆碱基),这样我就可以从特定坐标中提取 DNA 序列。返回序列的速度相当慢,我只是想知道是否有更快的方法来执行我还没有想到的这项任务。速度不会只是一两次点击的问题,但我正在遍历 145,000 个坐标的列表,这需要几天时间:/
import sys
from Bio import SeqIO
from Bio.Seq import Seq
def get_seq(fasta, cont_start, cont_end, strand):
f = fasta
start_pos = cont_start
end_pos = cont_end
for seq_record in SeqIO.parse(f, "fasta"):
if strand == '-' :
return seq_record.seq[int(start_pos):int(end_pos)].reverse_complement()
elif strand == '+':
return seq_record.seq[int(start_pos):int(end_pos)]
else :
print ' Invalid syntax!
sys.exit(1)
【问题讨论】:
-
您的意思是在这些坐标处为 FASTA 文件中的 所有 记录生成一个序列吗?如果是这样,您可能想使用
yield- 这将只返回第一个seq_record的序列部分。 -
@JoachimIsaksson:不,这是正确的语法。第二个参数是string identifying the input format(这里也是
f=fasta,这样只会导致相同的值被传递两次)。 -
@davidcain 啊,哎呀,这显然是早上喝咖啡前阅读代码的效果:)
标签: python performance biopython fasta dna-sequence