import json from pathlib import Path from typing import Any import yaml def load_json(path: Path) -> Any: """Tải dữ liệu từ một tệp JSON. Hàm này đọc nội dung của một tệp JSON từ đường dẫn đã cho và chuyển đổi nó thành một đối tượng Python (ví dụ: dictionary, list, string, number). Nó rất hữu ích khi bạn muốn đọc cấu hình hoặc dữ liệu đã lưu trữ từ một tệp JSON. Args: path (Path): Đường dẫn đến tệp JSON cần đọc. Ví dụ: Path("data/config.json"). Returns: Any: Dữ liệu được tải từ tệp JSON. Kiểu dữ liệu cụ thể phụ thuộc vào nội dung của tệp JSON (có thể là dict, list, str, int, v.v.). Raises: FileNotFoundError: Nếu tệp JSON không tồn tại tại đường dẫn đã cung cấp. """ if not path.exists(): raise FileNotFoundError(f"Missing JSON file: {path}") with open(path, "r", encoding="utf-8") as f: return json.load(f) def save_json(data: Any, path: Path) -> None: """Lưu dữ liệu Python vào một tệp JSON. Hàm này nhận một đối tượng Python (ví dụ: dictionary, list) và ghi nó vào một tệp JSON tại đường dẫn đã cho. Nếu các thư mục cha của tệp chưa tồn tại, hàm sẽ tự động tạo chúng. Dữ liệu sẽ được định dạng đẹp mắt với thụt lề 2 khoảng trắng để dễ đọc. Args: data (Any): Dữ liệu Python cần lưu. Đây có thể là bất kỳ kiểu dữ liệu nào mà JSON hỗ trợ (ví dụ: dict, list, str, int, float, bool, None). path (Path): Đường dẫn đầy đủ đến tệp JSON sẽ được tạo hoặc ghi đè. Ví dụ: Path("output/result.json"). Returns: None: Hàm này không trả về giá trị nào. Nó thực hiện hành động ghi tệp. """ path.parent.mkdir(parents=True, exist_ok=True) with open(path, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) def load_yaml(path: Path) -> dict[str, Any]: """Tải dữ liệu từ một tệp YAML. Hàm này đọc nội dung của một tệp YAML từ đường dẫn đã cho và chuyển đổi nó thành một đối tượng Python, thường là một dictionary. YAML thường được sử dụng cho các tệp cấu hình vì cú pháp của nó dễ đọc hơn JSON đối với con người. Args: path (Path): Đường dẫn đến tệp YAML cần đọc. Ví dụ: Path("config/settings.yaml"). Returns: dict[str, Any]: Dữ liệu được tải từ tệp YAML, thường là một dictionary với các khóa là chuỗi và giá trị có thể là bất kỳ kiểu dữ liệu nào. Raises: FileNotFoundError: Nếu tệp YAML không tồn tại tại đường dẫn đã cung cấp. """ if not path.exists(): raise FileNotFoundError(f"Missing YAML file: {path}") with open(path, "r", encoding="utf-8") as f: return yaml.safe_load(f)