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

如何基于参考目录匹配子目录名与文件名并打开对应文件

实现步骤与代码

核心思路

  1. 先遍历参考目录dir1,记录所有文件的相对路径(相对于dir1的路径,比如subdir1/file1.txt),形成集合用于快速匹配。
  2. 遍历目标目录dir2,对每个文件计算其相对于dir2的相对路径,检查该路径是否存在于dir1的记录集合中。
  3. 若路径匹配,同时打开dir1和dir2中对应的文件。

完整代码

import os

# 定义两个目录的实际路径,根据你的环境修改
dir1_path = "./dir1"
dir2_path = "./dir2"

# 第一步:收集dir1中所有文件的相对路径
dir1_files = set()
for root, _, files in os.walk(dir1_path):
    for file in files:
        # 计算文件相对于dir1的路径,自动适配系统路径分隔符
        rel_path = os.path.relpath(os.path.join(root, file), dir1_path)
        dir1_files.add(rel_path)

# 第二步:遍历dir2,匹配并打开对应文件
for root, _, files in os.walk(dir2_path):
    for file in files:
        # 计算当前文件相对于dir2的路径
        rel_path = os.path.relpath(os.path.join(root, file), dir2_path)
        # 检查路径是否在dir1的文件集合中
        if rel_path in dir1_files:
            # 拼接两个文件的完整路径
            target_file1 = os.path.join(dir1_path, rel_path)
            target_file2 = os.path.join(dir2_path, rel_path)
            
            # 用with语句自动管理文件句柄,避免资源泄漏
            try:
                with open(target_file1, 'r') as f1, open(target_file2, 'r') as f2:
                    print(f"已匹配并打开:\n{target_file1}\n{target_file2}\n")
                    # 这里可添加文件操作逻辑,比如读取内容、对比差异等
                    # content1 = f1.read()
                    # content2 = f2.read()
            except Exception as e:
                print(f"打开文件失败:{e}")

代码说明

  • os.walk():递归遍历目录下所有子目录与文件,返回当前路径、子目录列表、文件列表。
  • os.path.relpath():生成文件相对于指定目录的相对路径,自动适配Windows的\和类Unix的/,保证跨平台兼容性。
  • 用集合存储dir1的文件路径:集合的成员检查效率远高于列表,适合处理大量文件的场景。
  • with语句:自动管理文件的打开与关闭,无需手动调用close(),避免因异常导致的资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:01:09