Biopython中SeqIO对象的index_db方法是慢的吗?

时间:2016-10-04 13:30:09

标签: python biopython

我有这个:

files = glob.glob(str(dir_path) + "*.fa")
index = SeqIO.index_db(index_filename, files, "fasta")

seq = index[accession] # Slow
index.close()

return seq

我正在处理大文件(基因序列),但由于某些原因,需要大约4个secondes来获取我正在寻找的序列。我想知道index_db方法是否假设那么慢?我使用正确的方法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

第一次创建数据库时,可能需要一些时间。接下来,如果您不删除创建的index_filename,它应该会更快。

让我们说你有25个文件,每个文件都有一些基因。这种方法创建了一个SQLite数据库,可以帮助定位文件中的序列,比如"让我得到基因XXX"并且SQLite / index_db 知道基因在文件12.fasta中以及它在文件中的确切位置。因此,Biopython打开文件并快速扫描到基因位置。

如果没有index_db,你必须将每个记录加载到内存中,这很快但有些文件可能不适合RAM。

如果您想要获取区域的速度,可以使用FastaFile from pysamsamtools。像这样:

  1. 您必须使用faidx索引所有fasta文件:

    $ samtools faidx big_fasta.fas
    
  2. 从你的代码中写下这样的东西:

    from pysam import FastaFile
    
    rec = FastaFile("big_fasta.fas")  # big_fasta.fas.fai must exist.
    seq = rec.fetch(reference=gene_name, start=1000, end= 1200)
    
    print(s)
    
  3. 在我的电脑中,对于相同的操作,这比Biopython快2个数量级,但是你只能获得纯粹的碱基序列。