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

如何使用Python对比两个不同目录下同名文件的逐行内容

目录同名文件逐行对比实现(Python)

需求说明

  • 对dir1、dir2两个目录下的同名文件进行逐行对比
  • 若两个文件对应行的前两个逗号分隔的数值相等,输出该行完整内容

完整实现代码

import os

dir1 = "dir1"
dir2 = "/dir2"

# 取两个目录的文件名交集,直接得到待对比的同名文件,无需双层循环遍历
common_files = set(os.listdir(dir1)) & set(os.listdir(dir2))

for filename in common_files:
    # 拼接得到两个目录下对应文件的完整路径
    file1_path = os.path.join(dir1, filename)
    file2_path = os.path.join(dir2, filename)
    
    # 过滤子目录,仅处理文件
    if not os.path.isfile(file1_path) or not os.path.isfile(file2_path):
        continue
    
    print(f"===== 匹配结果(文件:{filename}) =====")
    # 同时打开两个文件逐行读取
    with open(file1_path, 'r', encoding='utf-8') as f1, open(file2_path, 'r', encoding='utf-8') as f2:
        # 遍历两个文件的对应行,行数不一致时自动忽略多出来的行
        for line1, line2 in zip(f1, f2):
            line1 = line1.strip()
            line2 = line2.strip()
            # 跳过空行
            if not line1 or not line2:
                continue
            # 按逗号分割取前两位转成数值对比,异常行直接跳过
            try:
                prefix1 = [int(item.strip()) for item in line1.split(',')[:2]]
                prefix2 = [int(item.strip()) for item in line2.split(',')[:2]]
            except ValueError:
                continue
            # 前两位数值相等则输出完整行
            if prefix1 == prefix2:
                print(line2)

逻辑说明

  • 用集合取文件名交集对比双层循环遍历,文件数量多的时候效率提升明显
  • 内置了空行、非数值格式行的异常处理,避免运行报错
  • 如果需要处理两个文件行数不一致的场景,可以把zip替换为itertools.zip_longest自行扩展逻辑
  • 输出逻辑可根据需求调整,比如同时输出两个文件的匹配行、输出匹配行号等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:36:02