#!/usr/bin/env python3 """ This program is used to read in a LANforge Dataplane CSV file and output a csv file that works with a customer's RvRvO visualization tool. Example use case: Read in ~/text-csv-0-candela.csv, output is stored at outfile.csv ./py-scripts/csv_convert.py -i ~/text-csv-0-candela.csv Output is csv file with mixxed columns, top part: Test Run,Position [Deg],Attenuation 1 [dB], Pal Stats Endpoint 1 Control Rssi [dBm], Pal Stats Endpoint 1 Data Rssi [dBm] Second part: Step Index,Position [Deg],Attenuation [dB],Traffic Pair 1 Throughput [Mbps] """ import sys import os import argparse if sys.version_info[0] != 3: print("This script requires Python 3") exit(1) sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../"))) class CSVParcer: def __init__(self, csv_infile=None, csv_outfile=None): i_atten = -1 i_rotation = -1 i_rxbps = -1 i_beacon_rssi = -1 i_data_rssi = -1 fpo = open(csv_outfile, "w") with open(csv_infile) as fp: line = fp.readline() if not line: exit(1) # Read in initial line, this is the CSV headers. Parse it to find the column indices for # the columns we care about. x = line.split(",") cni = 0 for cn in x: if cn == "Attenuation [dB]": i_atten = cni if cn == "Position [Deg]": i_rotation = cni if cn == "Throughput [Mbps]": i_rxbps = cni if cn == "Beacon RSSI [dBm]": i_beacon_rssi = cni if cn == "Data RSSI [dBm]": i_data_rssi = cni cni += 1 # Write out out header for the new file. fpo.write( "Test Run,Position [Deg],Attenuation 1 [dB],Pal Stats Endpoint 1 Control Rssi [dBm],Pal Stats Endpoint 1 Data Rssi [dBm]\n") # Read rest of the input lines, processing one at a time. Covert the columns as # needed, and write out new data to the output file. line = fp.readline() bottom_half = "Step Index,Position [Deg],Attenuation [dB],Traffic Pair 1 Throughput [Mbps]\n" test_run = "1" step_i = 0 while line: x = line.split(",") fpo.write("%s,%s,%s,%s,%s" % (test_run, x[i_rotation], x[i_atten], x[i_beacon_rssi], x[i_data_rssi])) bottom_half += ("%s,%s,%s,%s\n" % (step_i, x[i_rotation], x[i_atten], x[i_rxbps])) line = fp.readline() step_i += 1 # First half is written out now, and second half is stored... fpo.write("\n\n# RvRvO Data\n\n") fpo.write(bottom_half) def main(): parser = argparse.ArgumentParser( prog='csv_convert.py', formatter_class=argparse.RawTextHelpFormatter, epilog='''\ Useful Information: ''', description=''' csv_convert.py: converts the candela brief csv into the data for specific customer, ''') parser.add_argument('-i', '--infile', help="input file of csv data", required=True) parser.add_argument('-o', '--outfile', help="output file in .csv format", default='outfile.csv') args = parser.parse_args() csv_outfile_name = None csv_infile_name = None if args.infile: csv_infile_name = args.infile if args.outfile: csv_outfile_name = args.outfile print("infile: %s outfile: %s" % (csv_infile_name, csv_outfile_name)) CSVParcer(csv_infile_name, csv_outfile_name) if __name__ == "__main__": main()