Python读取FASTA文件时buf[1:]仅输出序列名无后续DNA的原因求解
问题解答:为什么buf[1:]仅输出
Rosalind_4402不含后续DNA序列? 核心原因是这段FASTA解析代码的执行逻辑,和FASTA文件的格式分层是对应的,具体执行流程如下:
- 代码刚打开文件后首次执行
buf = FASTA.readline().rstrip()时,读取的是FASTA文件的第一行内容,也就是序列头行>Rosalind_4402,去掉末尾换行符后,buf的值就是">Rosalind_4402"。 - 外层while循环启动后,
seq_name, seq = buf[1:], ''这行才会执行,此时buf里存的只有序列头内容,buf[1:]是去掉头行开头的>标记,自然只得到序列IDRosalind_4402。 - 赋值完seq_name后,代码会立刻调用
FASTA.readline().rstrip()读取下一行(也就是第一段DNA序列的第一行),随后进入内层while循环,逐行读取所有不带>开头的序列行,全部拼接给seq变量,直到读到下一个带>的序列头或者文件结束。整个序列拼接的过程中,不会再执行buf[1:]的赋值逻辑。 - 只有当一整条序列处理完成、buf已经存入下一条序列的头行(带
>)时,才会回到外层while循环,再次执行buf[1:]取下一条序列的ID。
你提到的DNA序列全部被存入了seq变量中,和序列ID是分开存储的,这也是FASTA格式解析的标准逻辑:>开头的行是序列ID/注释区,后续行才是核酸/蛋白序列内容。
内容的提问来源于stack exchange,提问作者DandyApe
相关产品推荐
相关产品推荐

