Something kinda works. new func CovertTo2D

in SpeedTestDataStructure, new function convertStructureTo2D will go
through each Speed Test file in it’s internal structure and have it
call it’s converter.

in SpeedTestFile, the bulk of the converting is done. It starts by
declaring the array that will be returned. It then appends the
Filename, Datetime, and other information. It then iterates through
each of it’s tests, and converts them.
With each test, it gets the longest thread time (i.e., longest TCP
download time) and creates the column headers for that test. It then
uses the PingThread’s new array_itize function to convert the thread to
an array.

in PingThread, the array_itize function starts by creating an array
with the pipe number and direction as values. It then loops through all
of the pings (minus the last one) and appends the size and speed
separately. Afterward, it pads the array with empty values (e.g. for
when the thread is 30 seconds long but the longest thread of that test
is 50). The last two values are the final size and speed (the “sum”
Ping, per se)

main.py uses print (pretty print) to print out the resulting conversion