【发布时间】: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的方式适当地遵循原则。