import os import sys import argparse def compare_directories(dir_a, dir_b): if not os.path.isdir(dir_a): print(f"错误: 目录 '{dir_a}' 不存在。") return if not os.path.isdir(dir_b): print(f"错误: 目录 '{dir_b}' 不存在。") return def get_prefix(filename): if "_frame_" in filename: return filename.split("_frame_")[0] return filename # 获取文件名到前缀的映射 files_a_map = {get_prefix(f): f for f in os.listdir(dir_a) if os.path.isfile(os.path.join(dir_a, f))} files_b_map = {get_prefix(f): f for f in os.listdir(dir_b) if os.path.isfile(os.path.join(dir_b, f))} prefixes_a = set(files_a_map.keys()) prefixes_b = set(files_b_map.keys()) only_in_a_prefixes = sorted(list(prefixes_a - prefixes_b)) only_in_b_prefixes = sorted(list(prefixes_b - prefixes_a)) both_prefixes = sorted(list(prefixes_a & prefixes_b)) print(f"目录 A: {dir_a} (前缀总数: {len(prefixes_a)})") print(f"目录 B: {dir_b} (前缀总数: {len(prefixes_b)})") print("-" * 30) print(f"只出现在 A 的文件前缀 ({len(only_in_a_prefixes)} 个):") if only_in_a_prefixes: for p in only_in_a_prefixes: print(f" - {files_a_map[p]}") else: print(" (无)") print(f"\n只出现在 B 的文件前缀 ({len(only_in_b_prefixes)} 个):") if only_in_b_prefixes: for p in only_in_b_prefixes: print(f" - {files_b_map[p]}") else: print(" (无)") print(f"\n共同出现的前缀: {len(both_prefixes)} 个") if __name__ == "__main__": parser = argparse.ArgumentParser(description="对比两个目录的文件名差异") parser.add_argument("dir_a", help="第一个目录路径") parser.add_argument("dir_b", help="第二个目录路径") args = parser.parse_args() compare_directories(args.dir_a, args.dir_b)