File size: 3,729 Bytes
6f73dc8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import os
import re
import shutil

# 未找到对应OBJ的前缀列表
missing_prefixes = [
    "6014a", "5654", "98138pb010", "3069bpb0348", "2431pb038", 
    "98138pb058", "MAYDAY0329", "85984pb289", "3069bpx36", 
    "44301a", "3069bpb001", "3069bpb0399", "98138pb033", 
    "3039pb041", "3069BPB0648", "MMAYDAY25TH", "4304"
]

# 配置路径
ldr_directory = "/public/home/wangshuo/gap/assembly/data/car_1k/subset_self/ldr_l30_rotrans_expand_wom"  # LDR源目录
target_directory = "/public/home/wangshuo/gap/assembly/cubedit/outputs/missingobj_ldr_files"  # 目标文件夹

# 创建目标目录(如果不存在)
os.makedirs(target_directory, exist_ok=True)

# 将缺失前缀转为小写(统一基准)
missing_prefixes_lower = [prefix.lower() for prefix in missing_prefixes]

# 结果字典:{原始前缀: [使用该前缀的LDR文件列表]}
usage_results = {prefix: [] for prefix in missing_prefixes}
# 记录每个前缀要复制的LDR文件(每个前缀最多一个)
prefix_to_ldr = {}

# 遍历LDR文件
for filename in os.listdir(ldr_directory):
    if filename.lower().endswith('.ldr') and len(prefix_to_ldr) < len(missing_prefixes):  # 所有前缀都找到对应文件后可提前退出
        filepath = os.path.join(ldr_directory, filename)
        try:
            with open(filepath, 'r', encoding='utf-8') as f:
                content_lower = f.read().lower()
                
                # 检查每个小写前缀是否在小写内容中出现
                for i, prefix_lower in enumerate(missing_prefixes_lower):
                    original_prefix = missing_prefixes[i]
                    # 如果该前缀还没有找到对应的LDR文件,则进行匹配
                    if original_prefix not in prefix_to_ldr:
                        pattern = r'(?<!\w)' + re.escape(prefix_lower) + r'(?!\w)'
                        if re.search(pattern, content_lower):
                            usage_results[original_prefix].append(filename)
                            # 记录第一个找到的LDR文件
                            prefix_to_ldr[original_prefix] = filepath
                            
        except UnicodeDecodeError:
            print(f"警告:文件 {filename} 编码异常,已跳过")
            continue

# 复制每个前缀对应的LDR文件(每个前缀只复制一个)
copied_files = []
for prefix, src_path in prefix_to_ldr.items():
    filename = os.path.basename(src_path)
    dest_path = os.path.join(target_directory, filename)
    
    # 避免重复复制
    if not os.path.exists(dest_path):
        shutil.copy2(src_path, dest_path)  # 保留文件元数据
        copied_files.append(f"{prefix} -> {filename}")
        print(f"已复制: {prefix} -> {filename}")

# 打印结果
print("\n===== 未找到OBJ前缀的LDR文件使用情况 =====")
for prefix, files in usage_results.items():
    if files:
        print(f"\n前缀 '{prefix}' 被以下LDR文件使用:")
        for file in files:
            print(f"  - {file}")
    else:
        print(f"\n前缀 '{prefix}' 未被任何LDR文件使用")

# 结果汇总
used_prefixes = [prefix for prefix, files in usage_results.items() if files]
unused_prefixes = [prefix for prefix, files in usage_results.items() if not files]

print("\n===== 结果汇总 =====")
print(f"被使用的缺失前缀 ({len(used_prefixes)}个):")
print(", ".join(used_prefixes))

print(f"\n未被使用的缺失前缀 ({len(unused_prefixes)}个):")
print(", ".join(unused_prefixes))

print(f"\n已为 {len(copied_files)} 个前缀各复制了一个相关LDR文件到目标目录: {target_directory}")
if copied_files:
    print("复制详情:")
    for item in copied_files:
        print(f"  {item}")