import sys import csv import ast import glob from collections import Counter def inspect_nav(csv_path: str, n=500): data_vals = Counter() rows = 0 with open(csv_path, newline="", encoding="utf-8", errors="replace") as f: reader = csv.DictReader(f) print(f"Columns: {reader.fieldnames}") for row in reader: rows += 1 if rows <= n: data_vals[row.get("data", "?")] += 1 print(f"\nTotal rows: {rows}") print("\nUnique 'data' field values (first 500 rows):") for k, v in data_vals.most_common(30): print(f" {k}: {v}") def inspect_usbl(csv_path: str, n=10): with open(csv_path, newline="", encoding="utf-8", errors="replace") as f: reader = csv.reader(f) print(f"Columns: [timestamp, direction, message]") received = 0 for row in reader: if len(row) < 3: continue direction = row[1].strip().upper() if direction != "RECEIVED": continue received += 1 if received > n: break try: raw = ast.literal_eval(row[2].strip()) if isinstance(raw, bytes): print(f" ts={row[0]} len={len(raw)} hex_start={raw[:16].hex()}") except Exception as e: print(f" ts={row[0]} parse_error={e}") if __name__ == "__main__": ship_dir = sys.argv[1] nav_files = glob.glob(f"{ship_dir}/*_navigation_log.csv") usbl_files = glob.glob(f"{ship_dir}/*_usbl.csv") if nav_files: print(f"\n=== NAV LOG: {nav_files[0]} ===") inspect_nav(nav_files[0]) if usbl_files: print(f"\n=== USBL (first 10 RECEIVED): {usbl_files[0]} ===") inspect_usbl(usbl_files[0]) if not nav_files and not usbl_files: print(f"No CSV files found in {ship_dir}") import os print("Files found:", os.listdir(ship_dir))