提取具有特定fasta ID的fasta序列块。

问题描述 投票:0回答:2

我是python的新手,试图通过这里的所有问题与我想要的东西相关,但还没有得到答案。我想在一个文件中提取具有特定fasta ID的连续fasta序列块,并将这些序列写入不同的文件中。文件的内容是不一样的(在一些地方,fasta IDs后面没有序列)。输入的文件是这样的。

 >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)

我希望我已经说得很清楚了,但如果有必要,我愿意接受更多的澄清。谢谢,我是python新手。

python fasta
2个回答
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()

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。

Biopython教程

读取序列文件

编写序列文件

注释:

  • 这并不是只具体选择连续的序列,而是选择包含 旗帜. (因为FASTA文件在某种程度上就像字典一样,排序没有意义) [关于将FASTA作为口述文件阅读的biopyhton文档])

  • seq_record可以有很多属性,如.name, .id, .description等,检查你的flag所在的位置,必要时进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.