From a921493d896148f086e6f2fc3606c815f78be242 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 12 Apr 2026 02:07:09 +0000 Subject: [PATCH] Add temperature_data_analysis/src/temperature_data_analysis/cli.py --- .../src/temperature_data_analysis/cli.py | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 temperature_data_analysis/src/temperature_data_analysis/cli.py diff --git a/temperature_data_analysis/src/temperature_data_analysis/cli.py b/temperature_data_analysis/src/temperature_data_analysis/cli.py new file mode 100644 index 0000000..1e93d40 --- /dev/null +++ b/temperature_data_analysis/src/temperature_data_analysis/cli.py @@ -0,0 +1,69 @@ +import argparse +import csv +import json +from pathlib import Path +from statistics import StatisticsError +from typing import List + +from temperature_data_analysis.core import analyze_temperature_data + + +def _read_temperature_data(csv_path: Path) -> List[float]: + """Reads temperature values (°C) from CSV input file.""" + temperatures: List[float] = [] + with csv_path.open(mode="r", encoding="utf-8") as csvfile: + reader = csv.DictReader(csvfile) + if "temperature_c" not in reader.fieldnames: + raise ValueError("CSV file must contain a 'temperature_c' column.") + for row in reader: + try: + value = float(row["temperature_c"]) + temperatures.append(value) + except (ValueError, TypeError): + continue # skip invalid entries + if not temperatures: + raise ValueError("No valid temperature values found in CSV file.") + return temperatures + + +def _write_json_output(output_path: Path, result_dict: dict) -> None: + """Writes the analysis result dictionary to a JSON output file.""" + with output_path.open(mode="w", encoding="utf-8") as f: + json.dump(result_dict, f, indent=2) + + +def main() -> None: + """CLI entry point for temperature data analysis.""" + parser = argparse.ArgumentParser( + description="Analyse von Temperaturdaten aus CSV-Dateien." + ) + parser.add_argument( + "--input", + required=True, + help="Pfad zur CSV-Datei mit Temperaturmesswerten." + ) + parser.add_argument( + "--output", + required=True, + help="Pfad zur JSON-Ausgabedatei mit den Analyseergebnissen." + ) + + args = parser.parse_args() + + input_path = Path(args.input) + output_path = Path(args.output) + + assert input_path.exists(), f"Input file not found: {input_path}" + + try: + data = _read_temperature_data(input_path) + result_dict = analyze_temperature_data(data) + _write_json_output(output_path, result_dict) + print(f"Analysis completed. Results written to {output_path}.") + except (ValueError, StatisticsError) as e: + print(f"Error during analysis: {e}") + raise SystemExit(1) + + +if __name__ == "__main__": + main() \ No newline at end of file