You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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')

逻辑说明

  1. 处理input2阶段:
    • 遇到>开头的行就提取ET编号作为字典键
    • 后续所有非>开头的行都归属到当前ET的序列,直到下一个>行出现
    • 所有ET和对应序列都存入字典方便后续快速查找
  2. 处理input1阶段:
    • 逐行提取末尾的ET编号,查询映射字典
    • 按要求先写入当前input1行,匹配到序列就写序列,没匹配到就写NaN

内容的提问来源于stack exchange,提问作者LoganLee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:27:02