优化数据处理逻辑,新增sanitize_data方法以转换NumPy类型为原生Python类型,修正数据保存格式

This commit is contained in:
2025-12-28 20:11:00 +08:00
parent 986188cf9d
commit 1285789b56
3 changed files with 24 additions and 5 deletions

View File

@ -1,10 +1,10 @@
import re
import traceback import traceback
from ast import literal_eval from ast import literal_eval
from gc import collect from gc import collect
from math import floor, ceil from math import floor, ceil
from pathlib import Path from pathlib import Path
from traceback import format_exc from traceback import format_exc
from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication
from numpy import array from numpy import array
from overrides import overrides from overrides import overrides
@ -399,7 +399,8 @@ class Data:
self.alignInfo = read_csv(Path(Config["Path"]["InputAlignInfo"]), self.alignInfo = read_csv(Path(Config["Path"]["InputAlignInfo"]),
encoding=Params.UTF8_ENCODING, encoding=Params.UTF8_ENCODING,
header=None).to_numpy().reshape(-1) 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: except Exception as e:
return Result().failure(info=Constants.INPUT_FAILURE + return Result().failure(info=Constants.INPUT_FAILURE +

View File

@ -2292,7 +2292,7 @@ class Data:
"back_ECG": Config["backcut_index_ECG"] "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) DataFrame(save_data).to_csv(Config["Path"]["Save_AlignInfo"], index=False, header=False)
except PermissionError as e: except PermissionError as e:
return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON["Save_Permission_Denied"]) return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON["Save_Permission_Denied"])

View File

@ -8,7 +8,7 @@ from PySide6.QtWidgets import QMessageBox, QWidget, QPushButton, QProgressBar, Q
from func.utils.Constants import Constants from func.utils.Constants import Constants
from func.utils.CustomException import TipsTypeValueNotExistError, MsgBoxTypeValueNotExistError from func.utils.CustomException import TipsTypeValueNotExistError, MsgBoxTypeValueNotExistError
from func.utils.Result import Result from func.utils.Result import Result
import numpy as np
class PublicFunc: class PublicFunc:
@ -308,3 +308,21 @@ class PublicFunc:
unit_data = artifact[i:i + 4] unit_data = artifact[i:i + 4]
if len(unit_data) < 4: if len(unit_data) < 4:
break 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