From 56d8a292beac2c28bd9152f2839fe20b5b76dc21 Mon Sep 17 00:00:00 2001 From: DXC Date: Mon, 22 Jun 2026 16:37:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(wavelength=5Fprefix):=20viz=5Fthread.py=20?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=20=5Fviz=5Finfer=5Fwavelength=5Fstart=5Fcolu?= =?UTF-8?q?mn=20=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/gui/core/viz_thread.py 的 _viz_infer_wavelength_start_column 是 step12_viz_panel.py 副本(无跨文件引用),两处独立维护必须同步。 同步前缀兼容与 DEBUG 日志逻辑。 Why: 同一函数双份副本不一致会导致 worker 子线程路径与 panel 主线程 路径在相同列名格式下表现差异。同步保证行为一致。 --- src/gui/core/viz_thread.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/gui/core/viz_thread.py b/src/gui/core/viz_thread.py index 2abc686..ca657e9 100644 --- a/src/gui/core/viz_thread.py +++ b/src/gui/core/viz_thread.py @@ -20,17 +20,28 @@ def _viz_training_spectra_csv_path(work_path: Path) -> Path: def _viz_infer_wavelength_start_column(df) -> Union[str, int]: """推断光谱起始列(training_spectra 通常以波长数值为列名,未必含 UTM_Y)。""" + import re import pandas as pd + _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") 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 + 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