【问题标题】:Extracting a block of fasta sequences with a particular fasta ID提取具有特定 fasta ID 的 fasta 序列块
【发布时间】:2013-11-20 22:03:26
【问题描述】:

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

我希望我已经说明了自己,但如有必要,我愿意提供更多澄清。谢谢。

【问题讨论】:

  • 我总是推荐第三方 Biopython 库来读取 FASTA 文件——尤其是它的 SeqIO 模块:biopython.org/wiki/SeqIO。如果你自己做,基本上你想逐行浏览文件,用布尔值跟踪你是否在一个有趣的记录中。累积序列,直到找到新的描述行,然后重新测试新的描述是否有趣。但实际上,只需使用该库,除非您的环境不允许您安装它。
  • 另外,Biopython 有很棒的教程和文档
  • 感谢会跟进。
  • @PeterDeGlopper,感谢您提供的详细信息,我尝试了类似的方法来创建一个空列表并随后在第一次命中之后附加行,直到以“>”开头但没有有趣的行遇到了命中,但我认为我没有以pythonic的方式适当地遵循原则。

标签: python fasta


【解决方案1】:
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()

【讨论】:

    【解决方案2】:
    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 Tutorial

    Reading sequence files

    Writing sequence files

    注意事项:

    • 这不会只/特别选择连续的 seq,而是包含 flag 的那些。 (因为 FASTA 文件更像字典,排序没有意义 [biopyhton doc on reading FASTA as dict]

    • seq_record 可以有许多属性,例如 .name、.id、.description 等。检查标志的位置并在必要时进行调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2020-04-05
      • 2018-10-23
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多