python - 提取多个带 ID 列表的 fasta 文件(按顺序)

标签 python bioinformatics biopython fasta

我有一个具有多个名称的文件,例如:

seq1 seq9 seq3 seq7 seq5 seqi seqn....

还有另一个包含我所有序列的fasta文件,我需要做的是按照上面列表的顺序对我的序列进行排序:例如:

>seq1
aaaaa
>seq9
aaaaa
>seq3
aaaaa
>seq7
aaaaa
>seq5
aaaaa
...

我尝试过这个:

input_file = open('concatenate_0035_0042_aa2.fa','r')
output_file = open('result.fasta','a')


liste=['seq1','seq5','seq8' etc]
print(len(liste))
compteur=1
for i in liste:
    record_dict = SeqIO.to_dict(SeqIO.parse("concatenate_0035_0042_aa2.fa", "fasta"))
    print(">",record_dict[i].id,file=output_file,sep="")
    print(record_dict[i].seq,file=output_file)
    compteur+=1
    print(compteur)

output_file.close()
input_file.close()

但实际上需要太多时间。

最佳答案

当前代码花费太多时间的原因是,对于列表中的每个序列 id,您解析 fasta 文件并将其转换为字典。当然,如果你的 fasta 文件很大,这是一个昂贵的计算。所以只做一次:

from Bio import SeqIO

ids = ['seq1', 'seq9', 'seq3', 'seq7', 'seq5'] 
with open('concatenate_0035_0042_aa2.fa') as seqs, open('result.fasta', 'w') as result:
    record_dict = SeqIO.to_dict(SeqIO.parse(seqs, 'fasta'))
    result_records = [record_dict[id_] for id_ in ids]
    SeqIO.write(result_records, result, "fasta")

with open(...) 语句会在您完成操作后自动关闭文件。

关于python - 提取多个带 ID 列表的 fasta 文件(按顺序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50004223/

相关文章:

Biopython 从全基因组中检索特定 CDS

python - 如何在不使用 PSUtil 的情况下获取 python 2.7 中的 CPU 使用率

python - 星号用作 scikit-learn 模型的参数时意味着什么?

python - 如何强制 Sphinx 使用 Python 3.x 解释器

python - pytest无法访问django类

perl - 如何运行 Bismark 亚硫酸氢盐测序程序?

r - EdgeR 中的彩色 MDS 图

python - 有没有更快的方法来查找两个数组(Python)中的匹配特征?

python - 将 hmmer --tblout 输出转换为 pandas 数据框

linux - Biopython 在 Mageia 上构建错误