Chip_Case_Generator/4ch-Z_Generator/ParamsManager.py

87 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import re
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)
# 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)
def save(self, params, filename):
if not filename.endswith(".json"):
filename = filename + ".json"
filepath = os.path.join(self.params_dir, filename)
# 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) + "]"
compact_json = re.sub(r"\[([\s\S]*?)\]", _flatten_array, raw_json)
# 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)
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
# from ParamsManager import ParamsManager
# # 创建参数管理器实例
# pm = ParamsManager('params') # 参数保存在 params 文件夹中
# # 保存单个参数
# pm.save(params, 'AWG_NCO') # 自动添加 .json 后缀
# # 加载单个参数
# params = pm.load('AWG_NCO')