From 1285789b56131c00bf517337e31dd36561a7961d Mon Sep 17 00:00:00 2001 From: marques Date: Sun, 28 Dec 2025 20:11:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C=E6=96=B0=E5=A2=9Esanitize?= =?UTF-8?q?=5Fdata=E6=96=B9=E6=B3=95=E4=BB=A5=E8=BD=AC=E6=8D=A2NumPy?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BA=E5=8E=9F=E7=94=9FPython=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E4=BF=AE=E6=AD=A3=E6=95=B0=E6=8D=AE=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- func/Module_cut_pair_file.py | 5 +++-- func/Module_precisely_align.py | 2 +- func/utils/PublicFunc.py | 22 ++++++++++++++++++++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/func/Module_cut_pair_file.py b/func/Module_cut_pair_file.py index ee92f51..592a334 100644 --- a/func/Module_cut_pair_file.py +++ b/func/Module_cut_pair_file.py @@ -1,10 +1,10 @@ +import re import traceback from ast import literal_eval from gc import collect from math import floor, ceil from pathlib import Path from traceback import format_exc - from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication from numpy import array from overrides import overrides @@ -399,7 +399,8 @@ class Data: self.alignInfo = read_csv(Path(Config["Path"]["InputAlignInfo"]), encoding=Params.UTF8_ENCODING, header=None).to_numpy().reshape(-1) - self.alignInfo = literal_eval(self.alignInfo[0]) + cleaned_str = re.sub(r'np\.(int64|float64|float32|int32)\((.*?)\)', r'\2', self.alignInfo[0]) + self.alignInfo = literal_eval(cleaned_str) except Exception as e: return Result().failure(info=Constants.INPUT_FAILURE + diff --git a/func/Module_precisely_align.py b/func/Module_precisely_align.py index 2cc01b9..4ca958f 100644 --- a/func/Module_precisely_align.py +++ b/func/Module_precisely_align.py @@ -2292,7 +2292,7 @@ class Data: "back_ECG": Config["backcut_index_ECG"] } } - save_data = [str(save_data)] + save_data = [str(PublicFunc.sanitize_data(save_data))] DataFrame(save_data).to_csv(Config["Path"]["Save_AlignInfo"], index=False, header=False) except PermissionError as e: return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON["Save_Permission_Denied"]) diff --git a/func/utils/PublicFunc.py b/func/utils/PublicFunc.py index 115a164..d369c04 100644 --- a/func/utils/PublicFunc.py +++ b/func/utils/PublicFunc.py @@ -8,7 +8,7 @@ from PySide6.QtWidgets import QMessageBox, QWidget, QPushButton, QProgressBar, Q from func.utils.Constants import Constants from func.utils.CustomException import TipsTypeValueNotExistError, MsgBoxTypeValueNotExistError from func.utils.Result import Result - +import numpy as np class PublicFunc: @@ -307,4 +307,22 @@ class PublicFunc: for i in range(0, len(artifact), 4): unit_data = artifact[i:i + 4] if len(unit_data) < 4: - break \ No newline at end of file + break + + @staticmethod + def sanitize_data(obj): + """ + 递归将对象中的 NumPy 类型转换为 Python 原生类型 + """ + if isinstance(obj, dict): + return {k: PublicFunc._sanitize_data(v) for k, v in obj.items()} + elif isinstance(obj, (list, tuple)): + return [PublicFunc._sanitize_data(i) for i in obj] + elif isinstance(obj, (np.integer, np.int64)): + return int(obj) + elif isinstance(obj, (np.floating, np.float64)): + return float(obj) + elif isinstance(obj, np.ndarray): + return obj.tolist() + else: + return obj