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