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
相关产品推荐
相关产品推荐

