# -*- coding: utf-8 -*- """对 B 类(同名不同内容)细分:b1 同主题旧版本 / b2 同名不同主题(高危,删除即丢失)。""" import json, os, re ROOT = r"D:\资料\03-项目开发\wecom_it_smart_desk\docs" data = json.load(open(r"D:\资料\03-项目开发\wecom_it_smart_desk\docs_cmp_result2.json", encoding="utf-8")) TEXT_EXT = {".md", ".mermaid", ".txt", ".json", ".py", ".conf", ".yml", ".yaml"} def first_title(p): ext = os.path.splitext(p)[1].lower() if ext not in TEXT_EXT: return None try: with open(p, encoding="utf-8", errors="ignore") as f: for _ in range(12): line = f.readline() if not line: break s = line.strip().lstrip("#%").strip() if s and not s.startswith(("```", "---", ">")): return s[:60] except Exception: pass return None b1, b2, unknown = [], [], [] for row in data["name_diff"]: oldrel, _, osz, newrel, _, nsz = row op = os.path.join(ROOT, oldrel) np_ = os.path.join(ROOT, newrel) ot, nt = first_title(op), first_title(np_) if ot is None or nt is None: unknown.append((oldrel, newrel, osz, nsz)) elif ot == nt: b1.append((oldrel, newrel, osz, nsz, ot)) else: b2.append((oldrel, newrel, ot, nt, osz, nsz)) print(f"B 类合计 {len(data['name_diff'])}") print(f" b1 同名同主题(新结构为演进版,旧版可删): {len(b1)}") print(f" b2 同名【不同主题】(⚠ 删除即丢失,必须改名抢救): {len(b2)}") print(f" b3 无法自动判定(二进制/无标题): {len(unknown)}") print("\n===== ⚠ b2 高危:同名不同主题 =====") for oldrel, newrel, ot, nt, osz, nsz in b2: print(f" 旧 {oldrel} [{osz/1024:.1f}KB]\n 主题: {ot}") print(f" 新 {newrel} [{nsz/1024:.1f}KB]\n 主题: {nt}\n") print("===== b1 同主题(新版通常更大=演进版) =====") for oldrel, newrel, osz, nsz, t in b1: mark = "新更大" if nsz > osz else ("旧更大⚠" if osz > nsz else "等大") print(f" - {oldrel} 旧{osz/1024:.1f}KB / 新{nsz/1024:.1f}KB {mark}") if unknown: print("\n===== b3 需人工看 =====") for oldrel, newrel, osz, nsz in unknown: print(f" - {oldrel} [{osz/1024:.1f}KB] <-> {newrel} [{nsz/1024:.1f}KB]") json.dump({"b1": b1, "b2": b2, "b3": unknown}, open(r"D:\资料\03-项目开发\wecom_it_smart_desk\docs_cmp_result3.json", "w", encoding="utf-8"), ensure_ascii=False, indent=1)