#!/usr/bin/env python3 """Group the demo CSV by camera and event type, ready to compare with a BI pivot.""" import argparse import csv from collections import Counter from pathlib import Path def summarize(source, output): with Path(source).open(encoding="utf-8-sig", newline="") as stream: reader = csv.DictReader(stream) if not {"Камера", "Тип"}.issubset(reader.fieldnames or []): raise ValueError("Ожидаются колонки Камера и Тип") counts = Counter((row["Камера"], row["Тип"]) for row in reader) with Path(output).open("w", encoding="utf-8", newline="") as stream: writer = csv.writer(stream, lineterminator="\n") writer.writerow(["Камера", "Тип", "Количество"]) writer.writerows([camera, kind, count] for (camera, kind), count in sorted(counts.items())) if __name__ == "__main__": parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("source") parser.add_argument("--output", default="summary.csv") args = parser.parse_args() summarize(args.source, args.output)