| #!/usr/bin/env python3 | |||||
| import csv | |||||
| 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() | |||||
| header = ["time"] | |||||
| csv_lines = list() | |||||
| p = re.compile(KEY_VALUE_REGEX) | |||||
| for part in content.split(";;;"): | |||||
| if part == "": | |||||
| break | |||||
| part = part.replace("\t", "\n").strip() | |||||
| csv_line = list() | |||||
| time = None | |||||
| for line in part.split("\n"): | |||||
| if not line.startswith("!") or line == "" or line == "\n": | |||||
| if time is None: | |||||
| time = line | |||||
| csv_line.append(time) | |||||
| m = p.match(line) | |||||
| if m: | |||||
| key = m.group(1).strip().replace(" ", "_") | |||||
| value = m.group(2).replace("MHz", "").strip() | |||||
| if key not in header: | |||||
| header.append(key) | |||||
| csv_line.append(value) | |||||
| if len(csv_line) > 1: | |||||
| #print(csv_line) | |||||
| csv_lines.append(csv_line) | |||||
| outputfile = open(args.file.replace("txt", "csv"), "w") | |||||
| writer = csv.writer(outputfile, delimiter=",", lineterminator="\n", escapechar='\\') | |||||
| writer.writerow(header) | |||||
| #print(all_csv_lines) | |||||
| for l in csv_lines: | |||||
| #print(l) | |||||
| writer.writerow(l) | |||||
| outputfile.close() | |||||
| outputfile = open(args.file.replace("txt", "csv"), "r") | |||||
| serial_df = pd.read_csv(outputfile) | |||||
| serial_df["datetime"] = pd.to_datetime( | |||||
| serial_df["time"].apply(lambda x: datetime.datetime.fromtimestamp(x)) | |||||
| ) | |||||
| serial_df.to_csv(args.file.replace("txt", "csv")) | |||||
| outputfile.close() | |||||