From e9c4535bb0d5602a9bf77b10773284209ccdd525 Mon Sep 17 00:00:00 2001 From: DXC Date: Mon, 22 Jun 2026 16:37:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(wavelength=5Fprefix):=20=5Fviz=5Finfer=5Fwa?= =?UTF-8?q?velength=5Fstart=5Fcolumn=20=E5=8A=A0=20nm/wavelength/wl/=CE=BB?= =?UTF-8?q?=20=E5=89=8D=E7=BC=80=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/gui/panels/step12_viz_panel.py _viz_infer_wavelength_start_column: 原逻辑只匹配 200.0<=v<=3000.0 的纯数字列名。新增正则剥前缀 _PREFIX_RE = ^(?:nm|wavelength|wl|λ|wave_len)[_\s-]* (不区分大小写),剥后再试 float。 覆盖 nm_700、wavelength_800.0、WL 900、λ_650 等命名风格。 兜底返回 0 时打印 df.columns.tolist() 便于下次失败时一眼定位列名。 Why: 训练光谱 CSV 可能因不同 step 输出格式差异,前缀化列名常见。 viz_thread.py 同步修改(同函数独立副本)。 --- src/gui/panels/step12_viz_panel.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/gui/panels/step12_viz_panel.py b/src/gui/panels/step12_viz_panel.py index 606eb85..14fa2c3 100644 --- a/src/gui/panels/step12_viz_panel.py +++ b/src/gui/panels/step12_viz_panel.py @@ -46,16 +46,31 @@ def _viz_training_spectra_csv_path(work_path: Path) -> Path: def _viz_infer_wavelength_start_column(df: pd.DataFrame) -> Union[str, int]: """推断光谱起始列(training_spectra 通常以波长数值为列名,未必含 UTM_Y)。""" + import re + # 兼容前缀:nm / nm_ / wavelength / wl / λ / wave_len(大小写不敏感) + _PREFIX_RE = re.compile(r"^(?:nm|wavelength|wl|\u03bb|wave_len)[_\s\-]*", re.IGNORECASE) for i, col in enumerate(df.columns): name = str(col).strip().lstrip("\ufeff") + # 1) 直接纯数字(如 "700.0") try: v = float(name) except ValueError: - continue - if 200.0 <= v <= 3000.0: + v = None + if v is not None and 200.0 <= v <= 3000.0: return i + # 2) 剥前缀后再试(如 "nm_700"、"wavelength_800.0"、"WL 900") + stripped = _PREFIX_RE.sub("", name) + if stripped != name: + try: + v = float(stripped) + except ValueError: + continue + if 200.0 <= v <= 3000.0: + return i if "UTM_Y" in df.columns: return "UTM_Y" + # 兜底分支触发时打印所有列名,便于下次失败时一眼看到根因 + print(f"DEBUG: 尝试解析的列名: {df.columns.tolist()}") return 0