123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import os
- import shutil
- from pathlib import Path
- import re
- def get_base_filename(filename):
- """获取文件名的基础部分(去除时间戳和序号后缀)"""
- # 匹配形如 _20250414094956928104_0.jpg 的后缀
- pattern = r'(_\d+_\d+\.jpg)$'
- match = re.search(pattern, filename)
- if match:
- # 返回去除后缀的文件名
- return filename[:-len(match.group(1))]
- return filename
- def compare_directories(dir1, dir2, output_dir):
- """比较两个目录中的文件并整理差异"""
- # 创建输出目录
- os.makedirs(output_dir, exist_ok=True)
-
- # 获取两个目录中的所有文件
- dir1_files = set(os.listdir(dir1))
- dir2_files = set(os.listdir(dir2))
-
- # 创建文件名映射
- dir1_base_files = {get_base_filename(f): f for f in dir1_files}
- dir2_base_files = {get_base_filename(f): f for f in dir2_files}
-
- # 找出只在dir1中存在的文件
- only_in_dir1 = set(dir1_base_files.keys()) - set(dir2_base_files.keys())
- # 找出只在dir2中存在的文件
- only_in_dir2 = set(dir2_base_files.keys()) - set(dir1_base_files.keys())
-
- # 创建子目录
- dir1_only_dir = os.path.join(output_dir, "only_in_dir1")
- dir2_only_dir = os.path.join(output_dir, "only_in_dir2")
- os.makedirs(dir1_only_dir, exist_ok=True)
- os.makedirs(dir2_only_dir, exist_ok=True)
-
- # 复制文件
- for base_name in only_in_dir1:
- src_file = os.path.join(dir1, dir1_base_files[base_name])
- dst_file = os.path.join(dir1_only_dir, dir1_base_files[base_name])
- shutil.copy2(src_file, dst_file)
- print(f"复制 {src_file} 到 {dst_file}")
-
- for base_name in only_in_dir2:
- src_file = os.path.join(dir2, dir2_base_files[base_name])
- dst_file = os.path.join(dir2_only_dir, dir2_base_files[base_name])
- shutil.copy2(src_file, dst_file)
- print(f"复制 {src_file} 到 {dst_file}")
-
- # 打印统计信息
- print(f"\n统计信息:")
- print(f"目录1中的文件总数: {len(dir1_files)}")
- print(f"目录2中的文件总数: {len(dir2_files)}")
- print(f"只在目录1中存在的文件数: {len(only_in_dir1)}")
- print(f"只在目录2中存在的文件数: {len(only_in_dir2)}")
- print(f"共同存在的文件数: {len(dir1_files) - len(only_in_dir1)}")
- if __name__ == "__main__":
- dir1 = r"D:\PythonProject\Model\output_20250329_140816_results"
- dir2 = r"D:\PythonProject\Model\Output\output_20250329_140816_results"
- output_dir = r"D:\PythonProject\Model\output_differences"
-
- compare_directories(dir1, dir2, output_dir)
|