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

Python实现get_mapping函数过滤无效ID错误输出问题求助

代码修改方案

无效条目产生的核心原因是未对非Ensembl ID列的空值、空白值做过滤,空字符串会被直接作为键存入字典,导致出现无有效键的映射行。以下是修改后的可直接运行的代码:

def get_mapping(map_file):
    # with语句自动管理文件资源,无需手动关闭
    with open(map_file, "r", encoding="utf-8") as f:
        mapping_list = []
        # 读取表头计算需要生成的字典数量
        header = f.readline().split()
        col_count = len(header) - 1
        for _ in range(col_count):
            mapping_list.append({})
        
        for line in f:
            line = line.strip("\n").split("\t")
            # 跳过列数和表头不匹配的脏数据行
            if len(line) != len(header):
                continue
            ensembl_id = line[0]
            for idx in range(col_count):
                target_id = line[idx+1].strip()
                # 仅非空的ID才存入字典,过滤空值、空白值
                if target_id:
                    mapping_list[idx][target_id] = ensembl_id
    return mapping_list

# 测试调用
if __name__ == "__main__":
    get_mapping('mapping/rno.map')
    get_mapping('mapping/mmu.map')
    get_mapping('mapping/hsa.map')

主要修改点

  • 新增字段空白处理逻辑:所有非Ensembl ID列先做首尾去空白,避免空格、制表符等空白字符被判定为有效ID
  • 新增非空校验:只有非空的目标ID才会被存入字典,直接过滤空字符串键的无效条目
  • 新增脏数据行过滤:列数和表头不一致的异常行直接跳过,避免索引报错和无效数据入库
  • 改用with语句管理文件句柄,避免忘记关闭文件导致的资源泄漏
  • 新增入口判断,避免模块被导入时重复执行测试代码

内容的提问来源于stack exchange,提问作者Best Video g

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:03