2013-11-20 79 views
0

我是python的新手,試圖通過所有與我想要但尚未得到答案相關的問題。我想在具有特定fasta ID的文件中提取連續fasta序列的塊,並將這些序列寫入單獨的文件中。文件內容是異構的(在某些地方,fasta ID後面沒有序列)。輸入文件是爲這樣:提取具有特定fasta ID的fasta序列塊

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

我希望我已經說清楚了,但我打開更多的澄清,如果必要的。謝謝。

+5

我總是推薦閱讀FASTA文件的第三方Biopython庫 - 特別是它的SeqIO模塊:http://biopython.org/wiki/SeqIO。如果你自己做,基本上你想要逐行瀏覽文件,用一個布爾值跟蹤你是否在一個有趣的記錄。積累序列,直到您找到新的描述行,然後重新測試新描述是否有趣。但是,真的,只要使用該庫,除非你的環境不允許你安裝它。 –

+0

另外,Biopython有很棒的教程和文檔 – Stedy

+0

謝謝你會做後續。 – user3014974

回答

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() 
相關問題