Загрузка данных


python MergeReportsNoir/merge_reports.py --product product360 --version 1.0.0


Скрипт находит все `report.csv` и `unmatched_swagger.csv` в подпапках папки input/
Пример: input/report1/              input/report2/
Склеивает.

Сохраняет результат в папку output/ с именами:
- `{product}-report-noir.csv`
- `{product}-report-unmatched-swagger.csv`


--
#!/usr/bin/env python3
"""Merge Noir reports from multiple subdirectories in the input folder."""

import argparse
import os
import shutil
import glob


def main():
    parser = argparse.ArgumentParser(description="Merge Noir reports from input folders.")
    parser.add_argument("--product", required=True, help="Product name (e.g., product)")
    parser.add_argument("--version", required=True, help="Version identifier (e.g., 1.0.0)")
    args = parser.parse_args()

    script_dir = os.path.dirname(os.path.abspath(__file__))
    input_dir = os.path.join(script_dir, "input")
    output_dir = os.path.join(script_dir, "output")

    # Ensure output directory exists
    os.makedirs(output_dir, exist_ok=True)

    output_report = os.path.join(output_dir, f"{args.product}-{args.version}-report-noir.csv")
    output_unmatched = os.path.join(output_dir, f"{args.product}-{args.version}-report-unmatched-swagger.csv")

    # Collect all report.csv and unmatched_swagger.csv from subdirectories
    report_files = sorted(glob.glob(os.path.join(input_dir, "*", "report.csv")))
    unmatched_files = sorted(glob.glob(os.path.join(input_dir, "*", "unmatched_swagger.csv")))

    # Merge report.csv files (header from first file, then data rows from all)
    header_written = False
    with open(output_report, "w", encoding="utf-8", newline="") as out:
        for filepath in report_files:
            with open(filepath, "r", encoding="utf-8", newline="") as f:
                lines = f.readlines()
                if not header_written:
                    out.writelines(lines)  # write header + data
                    header_written = True
                else:
                    out.writelines(lines[1:])  # skip header, write data only

    # Merge unmatched_swagger.csv files (header from first file, then data rows from all)
    header_written = False
    with open(output_unmatched, "w", encoding="utf-8", newline="") as out:
        for filepath in unmatched_files:
            with open(filepath, "r", encoding="utf-8", newline="") as f:
                lines = f.readlines()
                if not header_written:
                    out.writelines(lines)  # write header + data
                    header_written = True
                else:
                    out.writelines(lines[1:])  # skip header, write data only

    print(f"Merged {len(report_files)} report(s) -> {output_report}")
    print(f"Merged {len(unmatched_files)} unmatched swagger report(s) -> {output_unmatched}")
    print(f"Input subdirectories cleared.")


if __name__ == "__main__":
    main()