diff --git a/flight_quality/parser.py b/flight_quality/parser.py new file mode 100644 index 0000000..6b9b072 --- /dev/null +++ b/flight_quality/parser.py @@ -0,0 +1,17 @@ +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