compare_outputs.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import os
  2. import shutil
  3. from pathlib import Path
  4. import re
  5. def get_base_filename(filename):
  6. """获取文件名的基础部分(去除时间戳和序号后缀)"""
  7. # 匹配形如 _20250414094956928104_0.jpg 的后缀
  8. pattern = r'(_\d+_\d+\.jpg)$'
  9. match = re.search(pattern, filename)
  10. if match:
  11. # 返回去除后缀的文件名
  12. return filename[:-len(match.group(1))]
  13. return filename
  14. def compare_directories(dir1, dir2, output_dir):
  15. """比较两个目录中的文件并整理差异"""
  16. # 创建输出目录
  17. os.makedirs(output_dir, exist_ok=True)
  18. # 获取两个目录中的所有文件
  19. dir1_files = set(os.listdir(dir1))
  20. dir2_files = set(os.listdir(dir2))
  21. # 创建文件名映射
  22. dir1_base_files = {get_base_filename(f): f for f in dir1_files}
  23. dir2_base_files = {get_base_filename(f): f for f in dir2_files}
  24. # 找出只在dir1中存在的文件
  25. only_in_dir1 = set(dir1_base_files.keys()) - set(dir2_base_files.keys())
  26. # 找出只在dir2中存在的文件
  27. only_in_dir2 = set(dir2_base_files.keys()) - set(dir1_base_files.keys())
  28. # 创建子目录
  29. dir1_only_dir = os.path.join(output_dir, "only_in_dir1")
  30. dir2_only_dir = os.path.join(output_dir, "only_in_dir2")
  31. os.makedirs(dir1_only_dir, exist_ok=True)
  32. os.makedirs(dir2_only_dir, exist_ok=True)
  33. # 复制文件
  34. for base_name in only_in_dir1:
  35. src_file = os.path.join(dir1, dir1_base_files[base_name])
  36. dst_file = os.path.join(dir1_only_dir, dir1_base_files[base_name])
  37. shutil.copy2(src_file, dst_file)
  38. print(f"复制 {src_file} 到 {dst_file}")
  39. for base_name in only_in_dir2:
  40. src_file = os.path.join(dir2, dir2_base_files[base_name])
  41. dst_file = os.path.join(dir2_only_dir, dir2_base_files[base_name])
  42. shutil.copy2(src_file, dst_file)
  43. print(f"复制 {src_file} 到 {dst_file}")
  44. # 打印统计信息
  45. print(f"\n统计信息:")
  46. print(f"目录1中的文件总数: {len(dir1_files)}")
  47. print(f"目录2中的文件总数: {len(dir2_files)}")
  48. print(f"只在目录1中存在的文件数: {len(only_in_dir1)}")
  49. print(f"只在目录2中存在的文件数: {len(only_in_dir2)}")
  50. print(f"共同存在的文件数: {len(dir1_files) - len(only_in_dir1)}")
  51. if __name__ == "__main__":
  52. dir1 = r"D:\PythonProject\Model\output_20250329_140816_results"
  53. dir2 = r"D:\PythonProject\Model\Output\output_20250329_140816_results"
  54. output_dir = r"D:\PythonProject\Model\output_differences"
  55. compare_directories(dir1, dir2, output_dir)