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

Python实现两个目录同名txt文件逐行数值匹配方案咨询

数值对比逻辑实现方案

核心处理步骤

  • 先定义解析函数:处理每行文本,去掉前后的**标记,分割后提取前4个数值转为浮点型
  • 预读取目录2对应文件的所有行解析结果,避免重复IO操作提升效率
  • 遍历目录1文件的每一行解析结果,逐个和目录2的所有解析结果对比,判断对应4个数值的差值绝对值是否均在设定阈值范围内
  • 匹配成功后输出对应行的位置和数值信息

完整实现代码

import os

# 可自定义调整的参数
THRESHOLD = 2  # 差值阈值,可根据需求改为1或其他1~2之间的数值
dir1 = "/home/test"
dir2 = "/home/test1"

def parse_line(line):
    """解析单行文本,返回前4个浮点数值,解析失败返回None"""
    try:
        # 去掉所有星号、首尾空白,按空格分割
        parts = line.replace('*', '').strip().split()
        if len(parts) < 4:
            return None
        # 取前4个转为float
        return [float(p) for p in parts[:4]]
    except (ValueError, IndexError):
        return None

for filename in os.listdir(dir1):
    f1_path = os.path.join(dir1, filename)
    f2_path = os.path.join(dir2, filename)
    # 只处理两个目录都存在的同名文件
    if not os.path.isfile(f1_path) or not os.path.isfile(f2_path):
        continue
    print(f"\n===== 正在对比文件:{filename} =====")
    
    # 先读取并解析目录2文件的所有行
    f2_parsed = []
    with open(f2_path, 'r', encoding='utf-8') as f2:
        for line_num, line in enumerate(f2, 1):
            parsed = parse_line(line)
            if parsed:
                f2_parsed.append((line_num, parsed))
    
    # 遍历目录1的每一行进行对比
    with open(f1_path, 'r', encoding='utf-8') as f1:
        for f1_line_num, line in enumerate(f1, 1):
            f1_nums = parse_line(line)
            if not f1_nums:
                continue
            # 逐个和目录2的所有行对比
            matched = []
            for f2_line_num, f2_nums in f2_parsed:
                # 检查4个数值的差值绝对值都在阈值以内
                all_match = True
                for a, b in zip(f1_nums, f2_nums):
                    if abs(a - b) > THRESHOLD:
                        all_match = False
                        break
                if all_match:
                    matched.append(f2_line_num)
            # 输出匹配结果
            if matched:
                print(f"目录1第{f1_line_num}行数值{f1_nums} 匹配到目录2行:{matched}")
            else:
                print(f"目录1第{f1_line_num}行数值{f1_nums} 无匹配结果")

可调整优化点

  • 可以根据需求修改THRESHOLD阈值,调整匹配的严格程度
  • 如果需要输出差值具体数值,可以在匹配判断时计算并打印
  • 如果文件数量大、行数多,可以引入numpy做批量数值计算,进一步提升对比效率
  • 可以新增结果导出逻辑,把匹配结果写入到单独的结果文件中保存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:45:10