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

如何按列比对两个文件的数据并输出不匹配结果?

文件内容比对解决方案

需求说明

  • 比对input.txt与output.txt的行数据,按以下规则生成结果文件:
    1. 若input.txt某行的**第一列(地址)**未在output.txt中出现,将该行写入unmatch.txt;
    2. 若地址匹配但**第二列(数据)**不匹配,将两行对应数据(input行和output行)写入un_data.txt。

现有文件内容

input.txt

000000008b8c5200 bcbiubcbueqihd167
0000000056fb2620 akbhjgbfre34168gf
0000000045ab4630 jbshjdb7usvyysdu8
00000000672fa001 jhwdggdiuqwhuhius

output.txt

00000000af16380f avhdhjwqdjdkjdnxk
0000000056fb2620 akbhjgbfre34168gf
0000000045ab4630 jbshjdb7usvyysdu8
000000008b8c5200 bdqjhwdjhfjjehfiu

现有代码问题

原代码直接整行比对,无法区分「地址匹配但数据不匹配」的场景,也未按需求生成指定的输出文件。

解决方案代码

# 读取output.txt,构建地址到整行内容的映射字典
output_addr_map = {}
with open("output.txt", "r") as f_output:
    for line in f_output:
        cleaned_line = line.strip()
        if not cleaned_line:
            continue
        addr, data = cleaned_line.split(maxsplit=1)
        output_addr_map[addr] = cleaned_line

# 初始化结果列表
unmatch_content = []
un_data_content = []

# 遍历input.txt处理每一行
with open("input.txt", "r") as f_input:
    for line in f_input:
        cleaned_line = line.strip()
        if not cleaned_line:
            continue
        input_addr, input_data = cleaned_line.split(maxsplit=1)
        
        # 情况1:地址未在output中出现
        if input_addr not in output_addr_map:
            unmatch_content.append(cleaned_line)
        else:
            # 情况2:地址匹配但数据不匹配
            output_line = output_addr_map[input_addr]
            _, output_data = output_line.split(maxsplit=1)
            if input_data != output_data:
                un_data_content.append(f"input: {cleaned_line}")
                un_data_content.append(f"output: {output_line}\n")

# 写入unmatch.txt
with open("unmatch.txt", "w") as f_unmatch:
    f_unmatch.write("\n".join(unmatch_content))

# 写入un_data.txt
with open("un_data.txt", "w") as f_un_data:
    f_un_data.write("\n".join(un_data_content))

代码逻辑说明

  1. 构建映射字典:先将output.txt的内容按「地址-整行」的关系存入字典,实现地址的快速查找;
  2. 逐行处理input:拆分每行的地址和数据,分别判断属于哪种情况,将对应内容存入结果列表;
  3. 生成结果文件:将两个结果列表的内容分别写入需求指定的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:30:45