#!/usr/bin/env python3 import datetime import re from argparse import ArgumentParser import pandas as pd KEY_VALUE_REGEX = r"(.+):(.+)" if __name__ == "__main__": parser = ArgumentParser() parser.add_argument("-f", "--file", required=True, help="Input txt file.") args = parser.parse_args() file = open(args.file, "r") content = file.read() file.close() serial_df = None p = re.compile(KEY_VALUE_REGEX) for part in content.split(";;;"): if part == "": break part = part.replace("\t", "\n").strip() time = None line_dict = dict(time=None) for line in part.split("\n"): if not line.startswith("!") or line == "" or line == "\n": if line_dict["time"] is None: time = line line_dict["time"] = [time] m = p.match(line) if m: key = m.group(1).strip().replace(" ", "_") value = m.group(2).replace("MHz", "").replace("---", "").strip() line_dict[key] = [value] if len(line_dict) > 1: #print("line:") #print(line_dict) #print("serial_df:") #print(serial_df) if serial_df is None: serial_df = pd.DataFrame.from_dict(line_dict, orient="columns",) else: serial_df = pd.concat([serial_df, pd.DataFrame.from_dict(line_dict, orient="columns")]) serial_df = serial_df.copy() serial_df["datetime"] = pd.to_datetime( serial_df["time"].apply(lambda x: datetime.datetime.fromtimestamp(int(x))) ) serial_df.to_csv(args.file.replace("txt", "csv")) #serial_df = serial_df.filter(["datetime", "LTE_bw", "LTE_SCC2_bw", "LTE_SCC3_bw", "LTE_SCC4_bw", "SCC1_NR5G_bw", "NR5G_dl_bw", "NR5G_ul_bw", "LTE_SCC1_bw", "NR5G_bw"]) #print(serial_df.to_string())