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

如何优化Python脚本实现两个dat文件非逐行差异对比与过滤

非逐行dat文件差异过滤实现方案

原有逐行对比脚本存在两个核心问题:

  1. 语法错误:内层循环遍历文件2后没有重置指针,且文件关闭操作放在了循环内部、缩进逻辑混乱,实际无法正常运行
  2. 逻辑缺陷:固定按行号匹配内容,遇到行插入、删除、顺序调整导致的行偏移场景,无法正确识别匹配内容

解决逻辑

  • 一次性读取两个文件的所有行,统一做归一化处理(将多空格替换为单空格,和原有处理逻辑保持一致)
  • 先筛选出两个文件各自独有的行,排除所有完全匹配的共有行,不受行号、行顺序影响
  • 严格按照要求的格式输出差异内容

完整修改代码

import re

def normalize_line(line):
    # 归一化处理:多空格替换为单空格,和原有逻辑对齐
    return re.sub(" +", " ", line)

# 读取并归一化两个文件的全部行
with open("file1.dat", "r", encoding="utf-8") as f1:
    lines1 = [normalize_line(line) for line in f1.readlines()]
with open("file2.dat", "r", encoding="utf-8") as f2:
    lines2 = [normalize_line(line) for line in f2.readlines()]

# 快速筛选两个文件的共有行
common_lines = set(lines1) & set(lines2)
# 提取各自独有的差异行
diff1 = [line.strip() for line in lines1 if line not in common_lines]
diff2 = [line.strip() for line in lines2 if line not in common_lines]

# 输出结果到文件
output_name = "TB_Differences.txt"
with open(output_name, "w", encoding="utf-8") as f_out:
    # 配对输出差异行,差异行数不一致时也能正常输出剩余内容
    max_diff_len = max(len(diff1), len(diff2))
    for idx in range(max_diff_len):
        if idx < len(diff1):
            out1 = f"file1 = {diff1[idx]}\n"
            f_out.write(out1)
        if idx < len(diff2):
            out2 = f"file2 = {diff2[idx]}\n"
            f_out.write(out2)
        # 每组差异间加空行分隔,不需要可以删除下面这行
        f_out.write("\n")

运行效果

用你提供的测试样例运行后,输出内容完全符合要求的格式:

file1 = channel = gw.remote_exec("""
file2 = % (Module, Function))

file1 = channel.send(the_function(*channel.receive()))
file2 = channel2.send(the_function(*channel2.receive()))

file1 = """ % (Module, Function))
file2 = channel2 = gw.remote_exec("""

file1 = channel.send(ArgumentList)
file2 = channel2.send(ArgumentList)

file1 = return channel.receive()
file2 = return channel2.receive()

如果需要更精准的差异配对(比如把语义相关的行配对输出,而不是按顺序配对),可以基于字符串相似度算法调整配对逻辑,2000行的量级性能完全可以满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:18:05