import os import shutil def match_pcd_meta_tiff(image_json_folder, pcd_folder, depth_tiff_folder, output_pcd_folder, output_meta_folder, output_tiff_folder): os.makedirs(output_pcd_folder, exist_ok=True) os.makedirs(output_meta_folder, exist_ok=True) os.makedirs(output_tiff_folder, exist_ok=True) # PCD 前缀集合(去掉后缀 .pcd) pcd_prefixes = { os.path.splitext(f)[0] for f in os.listdir(pcd_folder) if f.lower().endswith('.pcd') } # image_json_folder 中的 jpg 和 json 文件(带 _color 后缀) all_files = os.listdir(image_json_folder) color_jpgs = [f for f in all_files if f.lower().endswith('_color.jpg')] jsons = [f for f in all_files if f.lower().endswith('_color.json')] # 生成前缀映射,去掉后缀 _color.jpg / _color.json jpg_prefix_map = {f[:-10]: f for f in color_jpgs} # '_color.jpg' 长度是10 json_prefix_map = {f[:-11]: f for f in jsons} # '_color.json' 长度是11 # depth_tiff_folder 中的深度图文件,文件名以 _depth.tiff 或 _depth.tif 结尾 tiff_files = [f for f in os.listdir(depth_tiff_folder) if f.lower().endswith(('.tiff', '.tif'))] # 去掉 _depth.tiff 后缀得到前缀 tiff_prefix_map = {} for f in tiff_files: if f.lower().endswith('_depth.tiff'): prefix = f[:-11] # 去掉 '_depth.tiff' (11个字符) elif f.lower().endswith('_depth.tif'): prefix = f[:-10] # 去掉 '_depth.tif' (10个字符) else: continue tiff_prefix_map[prefix] = f # 找到同时有 pcd、jpg、json、tiff 的 prefix matched_prefixes = [] for prefix in pcd_prefixes: if (prefix in jpg_prefix_map and prefix in json_prefix_map and prefix in tiff_prefix_map): matched_prefixes.append(prefix) print(f"共发现 {len(pcd_prefixes)} 个 pcd 文件") print(f"共发现 {len(color_jpgs)} 个 jpg (_color.jpg) 文件") print(f"共发现 {len(jsons)} 个 json (_color.json) 文件") print(f"共发现 {len(tiff_files)} 个 tiff (_depth.tiff/.tif) 文件") print(f"匹配到 {len(matched_prefixes)} 组文件") # 复制匹配文件到对应输出文件夹 for prefix in matched_prefixes: pcd_src = os.path.join(pcd_folder, prefix + '.pcd') jpg_src = os.path.join(image_json_folder, jpg_prefix_map[prefix]) json_src = os.path.join(image_json_folder, json_prefix_map[prefix]) tiff_src = os.path.join(depth_tiff_folder, tiff_prefix_map[prefix]) pcd_dst = os.path.join(output_pcd_folder, prefix + '.pcd') jpg_dst = os.path.join(output_meta_folder, jpg_prefix_map[prefix]) json_dst = os.path.join(output_meta_folder, json_prefix_map[prefix]) tiff_dst = os.path.join(output_tiff_folder, tiff_prefix_map[prefix]) shutil.copy2(pcd_src, pcd_dst) shutil.copy2(jpg_src, jpg_dst) shutil.copy2(json_src, json_dst) shutil.copy2(tiff_src, tiff_dst) print(f"复制完成,匹配了 {len(matched_prefixes)} 组文件。") if __name__ == "__main__": image_json_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\0525保存xyz信息的jpg+0516修订后的json" pcd_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\pcd" depth_tiff_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\depth_tiff" output_pcd_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\匹配后的pcd" output_meta_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\匹配后的json_jpg" output_tiff_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\匹配后的depth_tiff" match_pcd_meta_tiff(image_json_folder, pcd_folder, depth_tiff_folder, output_pcd_folder, output_meta_folder, output_tiff_folder)