Files
videocut/compare_dirs.py
2026-01-30 12:08:36 +08:00

56 lines
1.9 KiB
Python

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)