Python如何识别@开头的行提取read ID并获取下一行序列长度
实现方案
你要处理的是标准FASTQ测序格式文件,每4行对应一条读段,刚好匹配你的需求,用Python原生文件迭代就能轻松实现,不需要额外安装第三方库。
完整可运行代码
# 替换为你自己的输入、输出文件路径 input_file = "sample.fastq" output_file = "read_length.txt" # 用with上下文管理器自动管理文件开闭,避免资源泄漏 with open(input_file, 'r', encoding='utf-8') as f_in, open(output_file, 'w', encoding='utf-8') as f_out: for line in f_in: stripped_line = line.strip() # 识别以@开头的read ID行 if stripped_line.startswith('@'): # 按空格拆分取第一部分,就是完整read ID read_id = stripped_line.split()[0] # 直接取文件迭代器的下一行,就是对应的DNA序列行 dna_seq = next(f_in).strip() # 计算序列长度 seq_length = len(dna_seq) # 写入输出文件,制表符分隔ID和长度,可按需修改分隔格式 f_out.write(f"{read_id}\t{seq_length}\n")
核心逻辑说明
- 识别@开头行:调用字符串的
startswith('@')方法,直接判断当前行是否为ID行,逻辑简单高效。 - 跳转下一行:Python的文件对象是可迭代对象,调用
next()方法就可以直接获取迭代器的下一个元素,也就是ID行的下一行序列,完全符合你跳转取序列的需求。 - ID提取:ID行按空格拆分后的第一个元素就是标准FASTQ的读段ID,和你提供的示例格式完全匹配。
- 文件自动关闭:
with语句会在代码块执行完成后自动关闭输入输出文件,不需要你手动调用close()方法,避免忘记关文件导致的资源占用问题。
输出示例
用你提供的文件片段运行后,输出文件内容如下:
@D00780:143:CAJ3WANXX:1:1105:2036:1975 150 @D00780:143:CAJ3WANXX:1:1105:2106:1978 120 @D00780:143:CAJ3WANXX:1:1105:2469:1982 126
内容的提问来源于stack exchange,提问作者Banana nana
相关产品推荐
相关产品推荐

