from functools import lru_cache import csv import os @lru_cache(maxsize=128) def _load_csv(filename: str, mtime: float, encoding: str | None = None) -> tuple[tuple[str, ...], ...]: with open(filename, 'r', newline='', encoding=encoding) as f: reader = csv.reader(f) return tuple(tuple(row) for row in reader) def parse_csv_to_tuples(filename: str) -> list[tuple[str, ...]]: current_mtime = os.path.getmtime(filename) data: tuple[tuple[str, ...], ...] = _load_csv(filename, current_mtime) return sorted(data, key=lambda x: x[1]) def parse_csv_to_dict(filename: str) -> dict[str, list[str]]: current_mtime = os.path.getmtime(filename) data: tuple[tuple[str, ...], ...] = _load_csv(filename, current_mtime, encoding='utf-8-sig') result = {} for row in data: if row: result[row[0]] = list(row[1:]) return result