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

如何遍历两个文件的行对比数值,满足条件时更新目标文件对应值?

代码存在的核心问题

  • 内层for line in Lines循环逻辑错误:循环结束后tmp仅保留Density.topo最后一行的拆分结果,无法匹配每行的对应参数
  • 拆分得到的tmp[2]、tmp[3]是字符串类型,直接和整数1、0做相等判断永远返回False,不会进入替换逻辑
  • 拆分得到的tmp1是列表类型,没有replace方法,直接调用会触发语法错误
  • 先写入原始行row、再写入修改后行的逻辑会导致行重复,不符合修改需求
  • 使用Python内置关键字list作为变量名,会覆盖内置功能,存在语法隐患
  • oldFileName读取完成后未关闭文件,存在资源泄漏

修正后的可运行代码

oldFileName = 'tryout.hmo'
newFileName = 'tryout_NEW.hmo'
topoFileName = 'Density.topo'

# 预先读取拓扑文件并按首字段存为映射字典
topo_map = {}
with open(topoFileName, "r") as f:
    for line in f.readlines():
        tmp = line.split()
        if tmp:  # 跳过空行
            topo_map[tmp[0]] = tmp

# 处理原文件写入新文件
with open(oldFileName, "r") as f_old, open(newFileName, "w") as f_new:
    oldLines = f_old.readlines()
    in_elem_section = False  # 标记是否进入元素数据段
    for row in oldLines:
        # 检测到段起始标记
        if row.find("BEG_ELEM_DATA") > -1:
            in_elem_section = True
            f_new.write(row)
            continue
        
        # 不在目标段直接写原行
        if not in_elem_section:
            f_new.write(row)
            continue
        
        # 在目标段内处理替换
        row_stripped = row.rstrip()
        tmp1 = row_stripped.split()
        if not tmp1:  # 跳过空行
            f_new.write(row)
            continue
            
        # 匹配拓扑文件的对应记录
        if tmp1[0] in topo_map:
            tmp = topo_map[tmp1[0]]
            # 按规则替换第二个字段
            if tmp[2] == '1' and tmp[3] == '0':
                tmp1[1] = "18"
            elif tmp[2] == '1' and tmp[3] == '1':
                tmp1[1] = "19"
            else:
                tmp1[1] = "20"
            # 拼接为字符串写入,保留原行尾换行
            f_new.write(" ".join(tmp1) + "\n")
        else:
            # 没有匹配到的行写原内容
            f_new.write(row)

修正说明

  1. 改用with语句管理文件操作,自动关闭文件避免资源泄漏
  2. 预先把Density.topo的内容按首字段存为字典,方便快速匹配对应记录
  3. 增加段标记位,仅对BEG_ELEM_DATA之后的行做修改,避免误改其他内容
  4. 字符串与整数的判断逻辑做了类型对齐,确保替换分支可以正常触发
  5. 列表元素直接修改后重新拼接为字符串写入,不会重复写入原始行
  6. 增加空行容错逻辑,避免文件空行导致程序报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:06:04