# -*- coding: utf-8 -*- """并行复制夹紧缸 STEP 文件(去重后)到 catalog/step/,用归一化 .step 命名。""" import os, sys, shutil, collections from concurrent.futures import ThreadPoolExecutor, as_completed sys.path.insert(0, os.path.dirname(__file__)) # 复用 gen-clamp-series 的 collect()(仅复制,不重写 CSV/meta) import importlib.util spec = importlib.util.spec_from_file_location('gcs', os.path.join(os.path.dirname(__file__), 'gen-clamp-series.py')) gcs = importlib.util.module_from_spec(spec) spec.loader.exec_module(gcs) DST = r'D:/开发/OnebotCatalog/onebot-data/catalog/step' os.makedirs(DST, exist_ok=True) models = gcs.collect() print(f'去重后需复制 {len(models)} 个文件') todo = [] for m in models.values(): dst = os.path.join(DST, m['model'] + '.step') if not os.path.exists(dst): todo.append((m['src'], dst, m['model'])) print(f'尚未复制 {len(todo)} 个') def cp(item): src, dst, model = item try: shutil.copy2(src, dst) return (model, 'ok', None) except Exception as e: return (model, 'err', str(e)) done = 0 with ThreadPoolExecutor(max_workers=8) as ex: futs = [ex.submit(cp, it) for it in todo] for fut in as_completed(futs): model, status, err = fut.result() done += 1 if status == 'err': print(f'[ERR] {model}: {err}') elif done % 50 == 0: print(f' 进度 {done}/{len(todo)}') print(f'完成,共复制 {done} 个文件')