Files
wlan-lanforge-scripts/py-scripts/csv_convert.py
Ben Greear 44857107a0 csv-convert: Un-tested changes to create specific customer format.
Original interpretation of their request was incorrect, so this is
another attempt.  It will take input of the 'brief' csv output
for dataplane, already mostly converted to the customer's data
format, so less conversion is needed.

Un-tested as of now...
2021-05-10 11:04:04 -07:00

117 lines
3.8 KiB
Python
Executable File

#!/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)
if 'py-json' not in sys.path:
sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
class CSVParcer():
def __init__(self,csv_infile=None,csv_outfile=None):
idx = 0
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]")
# 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\n" % (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():
#debug_on = False
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,
''')
# for testing parser.add_argument('-i','--infile', help="input file of csv data", default='text-csv-0-candela.csv')
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
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()