import csv from io import StringIO from .model import Issue, Sample def parse_csv(text: str) -> tuple[list[Sample], list[Issue]]: samples, issues = [], [] reader = csv.DictReader(StringIO(text)) required = {"time_ms", "temperature_c", "voltage_v"} if not reader.fieldnames or not required.issubset(reader.fieldnames): return [], [Issue(1, "HEADER", "缺少必需列")] for line, row in enumerate(reader, 2): try: samples.append(Sample(line, int(row["time_ms"]), float(row["temperature_c"]), float(row["voltage_v"]))) except (TypeError, ValueError): issues.append(Issue(line, "PARSE", "数值缺失或格式错误")) return samples, issues