如何基于参考目录匹配子目录名与文件名并打开对应文件
实现步骤与代码
核心思路
- 先遍历参考目录
dir1,记录所有文件的相对路径(相对于dir1的路径,比如subdir1/file1.txt),形成集合用于快速匹配。 - 遍历目标目录
dir2,对每个文件计算其相对于dir2的相对路径,检查该路径是否存在于dir1的记录集合中。 - 若路径匹配,同时打开
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
相关产品推荐
相关产品推荐

