diff --git a/src/csvReader.py b/src/csvReader.py new file mode 100644 index 0000000..dbd43c4 --- /dev/null +++ b/src/csvReader.py @@ -0,0 +1,106 @@ +import csv + +SVG_NS = "http://www.w3.org/2000/svg" + + + +#--------------------------------------------------------- +# Detects wheter data seems to be of Boolean type +def allDataBoolean(data): + for i in data: + if not ( i == 0 or i == 1 ): + return False + return True + +# Detects wheter data seems to be of Integer type +def allDataInteger(data): + for i in data: + if not isinstance(item, int): + return False + return True + +# Detects wheter data seems to be of Percentage type +def allDataPercentage(data): + for i in data: + if ( 1<0 or i>100 ): + return False + return True +#--------------------------------------------------------- + +# Read a CSV file, returns a dict. Useful to populate self.data of a csvDataReader +def readFile(inFile): + data = {} + with open(inFile, 'rt') as f: + for line in f: + line = line.rstrip('\n') + key = ( line.split("\t") )[0] + value = ( line.split("\t") )[1] + data[key] = value + return data + +#--------------------------------------------------------- + +#========================================= +# Class to handle CSV data +class csvReader: + + def __init__(self, arg): + self.infile = arg + self.data = readFile(self.infile) + + def getLabels(self): + return self.data.keys() + + def prettyPrint(self): + line = "Data of file \""+ self.infile +"\":" + horizontalBar = "+"+"-"*(len(line) + 2)+"+" + print (horizontalBar) + print ("| "+line+" |") + print (horizontalBar) + for i in self.data.keys(): + print( "\t",i,"\t",self.data[i]) + print (horizontalBar+"\n") + + # Detects if the numerical data is Boolean, Intergers, Percentages or just plain Reals. + def detectDataType(self): + dataToTest = self.data.values() + if( allDataBoolean( dataToTest ) ): + return "bool" + if( allDataInteger( dataToTest ) ): + return "int" + if( allDataPercentage( dataToTest ) ): + return "percent" + return "real" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/testCsvReader.py b/src/testCsvReader.py new file mode 100755 index 0000000..f1ef8e0 --- /dev/null +++ b/src/testCsvReader.py @@ -0,0 +1,28 @@ +#!/usr/bin/python + +from csvReader import * + +#----------------------------------- +# Management of arguments +#----------------------------------- +import argparse +parser = argparse.ArgumentParser( + description='test of cvsReader: takes CSV files as argument; pretty-print them in standard output.') +# positional argument +parser.add_argument( + "infiles", + nargs='+', + help="filenames of the CSV files against which to test csvReader.") + +args = parser.parse_args() + + +# ----------------------------------- +# Main +# ----------------------------------- +for infile in args.infiles: + #csvData = open(infile, 'r').read() + + csvData = csvReader(infile) + csvData.prettyPrint() + \ No newline at end of file diff --git a/src/testSvgWheelManager.py b/src/testSvgWheelManager.py index a7fef91..cbbb556 100755 --- a/src/testSvgWheelManager.py +++ b/src/testSvgWheelManager.py @@ -1,39 +1,39 @@ #!/usr/bin/python from svgWheelManager import * #----------------------------------- # Management of arguments #----------------------------------- import argparse parser = argparse.ArgumentParser( - description='test of svgColourManager: takes SVG maps as argument; sould return a list of ID tags and matching colours in standard output.') + description='test of svgColourManager: takes SVG maps as argument; should return a the code of a SVG map with superimposed charts, in standard output.') # positional argument parser.add_argument( "infiles", nargs='+', help="filenames of the SVG files against which to test svgColourManager.") args = parser.parse_args() # ----------------------------------- # Main # ----------------------------------- for infile in args.infiles: svg = open(infile, 'r').read() #import xml.etree.cElementTree as ET #tree = ET.ElementTree(ET.fromstring(svg)) # for node in tree.findall('.//{%s}path' % SVG_NS): #svg = insertCircleOnPath(node) ##print (svg) wheelManager = SvgWheelManager(svg) # wheelManager.insertCirclesOnPaths() # wheelManager.insertRectAroundPaths() wheelManager.insertCircleChartOnPaths() wheelManager.printSVG()