2026-07-28 17:57:28 +08:00
|
|
|
|
import json
|
2026-07-28 22:28:14 +08:00
|
|
|
|
import re
|
2026-07-28 17:57:28 +08:00
|
|
|
|
import os
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ParamsManager:
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, params_dir='params'):
|
|
|
|
|
|
self.params_dir = params_dir
|
|
|
|
|
|
self._ensure_dir_exists()
|
|
|
|
|
|
|
|
|
|
|
|
def _ensure_dir_exists(self):
|
|
|
|
|
|
Path(self.params_dir).mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
|
2026-07-29 10:50:06 +08:00
|
|
|
|
# def save(self, params, filename):
|
|
|
|
|
|
# if not filename.endswith('.json'):
|
|
|
|
|
|
# filename = filename + '.json'
|
|
|
|
|
|
#
|
|
|
|
|
|
# filepath = os.path.join(self.params_dir, filename)
|
|
|
|
|
|
#
|
|
|
|
|
|
# with open(filepath, 'w', encoding='utf-8') as f:
|
|
|
|
|
|
# json.dump(params, f, indent=2, separators=(',', ':'), ensure_ascii=False)
|
|
|
|
|
|
|
2026-07-28 17:57:28 +08:00
|
|
|
|
def save(self, params, filename):
|
2026-07-29 10:50:06 +08:00
|
|
|
|
if not filename.endswith(".json"):
|
|
|
|
|
|
filename = filename + ".json"
|
2026-07-28 22:28:14 +08:00
|
|
|
|
|
2026-07-28 17:57:28 +08:00
|
|
|
|
filepath = os.path.join(self.params_dir, filename)
|
2026-07-28 22:28:14 +08:00
|
|
|
|
|
2026-07-29 10:50:06 +08:00
|
|
|
|
# 1. 正常生成带有标准缩进的 JSON 字符串
|
|
|
|
|
|
raw_json = json.dumps(params, indent=2, ensure_ascii=False)
|
|
|
|
|
|
|
|
|
|
|
|
# 2. 正则1:将简单的纯数值/字符串列表压缩成单行 [100, 200, 300]
|
|
|
|
|
|
def _flatten_array(match):
|
|
|
|
|
|
content = match.group(1)
|
|
|
|
|
|
if "{" in content: # 如果包含字典对象,不在这里处理
|
|
|
|
|
|
return match.group(0)
|
|
|
|
|
|
items = [item.strip() for item in content.split(",") if item.strip()]
|
|
|
|
|
|
return "[" + ", ".join(items) + "]"
|
2026-07-28 22:28:14 +08:00
|
|
|
|
|
2026-07-29 10:50:06 +08:00
|
|
|
|
compact_json = re.sub(r"\[([\s\S]*?)\]", _flatten_array, raw_json)
|
2026-07-28 22:28:14 +08:00
|
|
|
|
|
2026-07-29 10:50:06 +08:00
|
|
|
|
# 3. 正则2:将列表里的单层字典对象压缩成单行 {"a": 1, "b": 2}
|
|
|
|
|
|
def _flatten_object(match):
|
|
|
|
|
|
content = match.group(1)
|
|
|
|
|
|
if "{" in content or "[" in content: # 包含嵌套对象的字典不压缩
|
|
|
|
|
|
return match.group(0)
|
|
|
|
|
|
# 清理换行和多余空格,格式化为单行
|
|
|
|
|
|
lines = [line.strip() for line in content.split("\n") if line.strip()]
|
|
|
|
|
|
return "{ " + " ".join(lines) + " }"
|
|
|
|
|
|
|
|
|
|
|
|
final_json = re.sub(r"\{([^{}\[\]]*?)\}", _flatten_object, compact_json)
|
|
|
|
|
|
|
|
|
|
|
|
with open(filepath, "w", encoding="utf-8") as f:
|
|
|
|
|
|
f.write(final_json)
|
2026-07-28 22:28:14 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-07-28 17:57:28 +08:00
|
|
|
|
|
|
|
|
|
|
def load(self, filename):
|
|
|
|
|
|
if not filename.endswith('.json'):
|
|
|
|
|
|
filename = filename + '.json'
|
|
|
|
|
|
|
|
|
|
|
|
filepath = os.path.join(self.params_dir, filename)
|
|
|
|
|
|
|
|
|
|
|
|
with open(filepath, 'r', encoding='utf-8') as f:
|
|
|
|
|
|
params = json.load(f)
|
|
|
|
|
|
return params
|
2026-07-28 22:28:14 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-07-28 17:57:28 +08:00
|
|
|
|
|
|
|
|
|
|
# from ParamsManager import ParamsManager
|
|
|
|
|
|
|
|
|
|
|
|
# # 创建参数管理器实例
|
|
|
|
|
|
# pm = ParamsManager('params') # 参数保存在 params 文件夹中
|
|
|
|
|
|
|
|
|
|
|
|
# # 保存单个参数
|
|
|
|
|
|
# pm.save(params, 'AWG_NCO') # 自动添加 .json 后缀
|
|
|
|
|
|
|
|
|
|
|
|
# # 加载单个参数
|
|
|
|
|
|
# params = pm.load('AWG_NCO')
|
2026-07-29 10:50:06 +08:00
|
|
|
|
|
|
|
|
|
|
|