如何不使用Biopython计算FASTA数据集内所有序列的长度
Python实现FASTA序列长度统计(无需Biopython)
核心逻辑说明
- 逐行读取FASTA文件,区分头部行和序列行
- 每次遇到头部行时,先输出上一组已统计的序列ID和长度(如果存在的话)
- 序列统计时自动去除行首尾的空白字符(包括换行符),避免长度统计错误
- 循环结束后额外输出最后一组序列的统计结果,避免遗漏末尾序列
- 大文件场景下直接统计长度不需要存储完整序列,内存占用更低,如果需要保留序列内容可以将长度计数替换为字符串拼接,最后取
len(seq)即可
完整实现代码
import re path = '/home/try.txt' current_header = '' seq_length = 0 with open(path, 'r') as f: for line in f: # 去除行尾换行符 line = line.strip() # 跳过空行 if not line: continue # 匹配头部行,匹配你的原有实现思路 if re.match(r'^>', line): # 已有上一个header时先输出上一组统计结果 if current_header: print(f"{current_header} {seq_length}") # 提取当前header(去掉开头的>符号) current_header = line.lstrip('>') # 重置序列长度计数器 seq_length = 0 else: # 累加当前序列行的长度 seq_length += len(line) # 输出最后一组序列的统计结果 if current_header: print(f"{current_header} {seq_length}")
结果验证
针对你给出的示例FASTA文件,运行上述代码输出结果和预期完全一致:
header1 30 header2 10 header3 16
内容的提问来源于stack exchange,提问作者Andrew Swainskeren
相关产品推荐
相关产品推荐

