我是python的新手,并尝试通过这里的所有问题来解决我想要的问题,但还没有得到答案。我想在具有特定fasta ID的文件中提取连续fasta序列的块,并将序列写入单独的文件中。文件内容是异构的(在某些地方,fasta ID后面没有序列)。输入文件如下:
>ENS00000004062_species1
>ENS00000004062_species2
>ENS00000004062_species3
ATGGGCTTTTCCACAGAGCTTGCAT
>ENS00000004062_species4
ATGGGCTTTTCCACAGAGCTTGCAAC
>ENS00000006504_species2
CTCTTTGACCCTCCCCATCAGGTTCA
>ENS00000006504_species3
CTCTGACCCTCCCCACCAGGTTCAGGG
CTGGGAGGTGCACTCCAGGGATTC
>ENS00000006504_species4
....加上许多其他序列 和不同的IDS但相同 物种和fasta ID的模式。
例如,如果我想用ENS00000006504提取序列,我想要它们的整个fasta描述以及它后面的序列,但是当它识别出一个新的fasta ID时它应该停止。我有这个代码,但它没有做任何有意义的事情。它识别包含标志ID的第一行,但之后会打印所有内容。
flag = 'ENSBTAT00000006504'
with open(file_name) as file:
for line in file:
if flag in line:
lines = file.readlines()
print(lines)
我希望我已经说清楚了,但如果有必要,我愿意接受更多澄清。感谢。
答案 0 :(得分:0)
from Bio import SeqIO
input_file = open('file.fasta','r')
output_file = open('result.fasta','a')
for key in SeqIO.parse(input_file, 'fasta'):
entry_name = key.name
if key.name in ['ENSBTAT00000006504']: #Here you can list several IDs
output_file.write(str('>' + (key.id)) + '\n')
output_file.write(str(key.seq[0:]) + '\n')
output_file.close()
input_file.close()
答案 1 :(得分:0)
from Bio import SeqIO
input_file = "your_file.fa"
flag = 'ENSBTAT00000006504'
selected_seqs = list()
for seq_record in SeqIO.parse(input_file, 'fasta'):
if flag in seq_record.name:
selected_seqs.append(seq_record)
SeqIO.write(selected_seqs, "new_filename.fa", "fasta")
这使用了更多的biopython。
注意:
这不是仅/特定选择连续的序列,而是选择包含 flag 的序列。 (由于FASTA文件就像字典一样,而且排序没有意义 [biopyhton doc on reading FASTA as dict])
seq_record可以具有.name,.id,.description等许多属性。请检查标志的位置并在必要时进行调整。