# config_loader.py - 读取config.toml的示例代码 import toml import os from pathlib import Path from typing import Any, Dict, Optional class ConfigLoader: """TOML配置文件加载器""" def __init__(self, config_path: Optional[str] = None): """ 初始化配置加载器 Args: config_path: 配置文件路径,如果为None则自动查找 """ if config_path is None: # 自动查找配置文件 config_path = self._find_config_file() self.config_path = Path(config_path) self._config: Dict[str, Any] = {} self.load() def _find_config_file(self) -> str: """自动查找配置文件""" possible_paths = [ "config.toml", "config/config.toml", "~/.config/myapp/config.toml", "/etc/myapp/config.toml" ] for path in possible_paths: expanded_path = os.path.expanduser(path) if os.path.exists(expanded_path): return expanded_path raise FileNotFoundError("未找到配置文件") def load(self) -> None: """加载配置文件""" if not self.config_path.exists(): raise FileNotFoundError(f"配置文件不存在: {self.config_path}") with open(self.config_path, 'r', encoding='utf-8') as f: self._config = toml.load(f) def get(self, key: str, default: Any = None) -> Any: """获取配置值,支持点号分隔的路径""" keys = key.split('.') value = self._config try: for k in keys: value = value[k] return value except (KeyError, TypeError): return default def get_section(self, section: str) -> Dict[str, Any]: """获取整个配置节""" return self._config.get(section, {}) def reload(self) -> None: """重新加载配置文件""" self.load() def __getitem__(self, key: str) -> Any: """支持字典式访问""" return self.get(key) def __contains__(self, key: str) -> bool: """检查配置是否存在""" return self.get(key) is not None @property def all(self) -> Dict[str, Any]: """获取所有配置""" return self._config