提取几个带有 ID 列表的 fasta 文件(按顺序)
extract several fasta file with a list of ID (in order)
我有一个包含多个名称的文件,例如:
seq1 seq9 seq3 seq7 seq5 seqi seqn....
和另一个包含我所有序列的 fasta 文件,我需要做的是按照列表 above:such 的顺序对我的序列进行排序,如:
>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(...)
语句负责在您完成后自动关闭文件。
我有一个包含多个名称的文件,例如:
seq1 seq9 seq3 seq7 seq5 seqi seqn....
和另一个包含我所有序列的 fasta 文件,我需要做的是按照列表 above:such 的顺序对我的序列进行排序,如:
>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(...)
语句负责在您完成后自动关闭文件。