18 lines
730 B
Python
18 lines
730 B
Python
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
|