Python如何按两文件匹配的ET编号提取对应内容并生成目标输出?
跨文件ET匹配数据提取实现方案
前置说明
- 不需要使用
os.listdir,你的需求是处理固定的两个指定输入文件,无需遍历目录下的其他文件 - 你现有代码只提取存储了input2的ET编号,缺少对应序列内容的关联存储,首先需要把input2的内容整理为ET编号到对应序列的映射字典,再遍历input1匹配输出即可
完整实现代码
# 先构造input2的ET-序列映射字典 et_seq_map = {} current_et = None current_seq = [] with open('input2', 'r') as fr2: for line in fr2: line = line.strip() if not line: continue if line.startswith('>'): # 先把上一个ET的序列存到字典 if current_et is not None: et_seq_map[current_et] = '\n'.join(current_seq) # 提取当前行的ET编号 parts = line.split(', ') for part in parts: if part.startswith('cc:ET'): current_et = part.replace('cc:', '') current_seq = [] break else: # 非>开头的行都是当前ET的序列内容 current_seq.append(line) # 循环结束后存最后一个ET的序列 if current_et is not None: et_seq_map[current_et] = '\n'.join(current_seq) # 读取input1匹配输出 with open('input1', 'r') as fr1, open('output', 'w') as fw: for line in fr1: line = line.strip() if not line: continue # 提取input1当前行的ET编号 et = line.split(',')[-1] # 先写input1的当前行 fw.write(line + '\n') # 匹配序列 if et in et_seq_map: fw.write(et_seq_map[et] + '\n') else: fw.write('NaN\n')
逻辑说明
- 处理input2阶段:
- 遇到
>开头的行就提取ET编号作为字典键 - 后续所有非
>开头的行都归属到当前ET的序列,直到下一个>行出现 - 所有ET和对应序列都存入字典方便后续快速查找
- 遇到
- 处理input1阶段:
- 逐行提取末尾的ET编号,查询映射字典
- 按要求先写入当前input1行,匹配到序列就写序列,没匹配到就写
NaN
内容的提问来源于stack exchange,提问作者LoganLee
相关产品推荐
相关产品推荐

