Package TEES :: Package Utils :: Module TableUtils
[hide private]

Source Code for Module TEES.Utils.TableUtils

  1  import csv 
  2  import os 
  3  import types 
  4   
  5  decimals = 1 
  6   
7 -def getKeys(dicts):
8 for dict in dicts: 9 keys = set() 10 for key in dict.keys(): 11 keys.add(key) 12 keys = list(keys) 13 keys.sort() 14 keyDict = {} 15 for key in keys: 16 keyDict[key] = key 17 return (keys, keyDict)
18
19 -def addToCSV(dict, filename, fieldnames=None):
20 rows = [] 21 writeTitles = True 22 if os.path.exists(filename): 23 rows = readCSV(filename, fieldnames) 24 if len(rows) > 0: 25 writeTitles = False 26 if not isinstance(dict, list): 27 dict = [dict] 28 writeCSV(rows+dict, filename, fieldnames, writeTitles)
29
30 -def selectRowsCSV(rows, conditions, invert=False):
31 selected = [] 32 for row in rows: 33 for key in conditions.keys(): 34 exists = row.has_key(key) and row[key] == conditions[key] 35 if invert: exists = not exists 36 if exists: 37 selected.append(row) 38 return selected
39
40 -def getValueSet(rows, column):
41 values = set() 42 for row in rows: 43 if row.has_key(column): 44 values.add(row[column]) 45 return values
46
47 -def remapKeys(rows, dict):
48 newRows = [] 49 for row in rows: 50 newRow = {} 51 for k in row.keys(): 52 value = row[k] 53 key = k 54 if key in dict.keys(): 55 key = dict[key] 56 newRow[key] = value 57 newRows.append(newRow) 58 return newRows
59
60 -def removeKeys(rows, keys):
61 newRows = [] 62 for row in rows: 63 newRow = {} 64 for k in row.keys(): 65 value = row[k] 66 key = k 67 if key not in keys: 68 newRow[key] = value 69 newRows.append(newRow) 70 return newRows
71
72 -def writeCSV(dict, filename, fieldnames=None, writeTitles=True):
73 if not isinstance(dict, list): 74 dict = [dict] 75 if fieldnames == None: 76 keys, keyDict = getKeys(dict) 77 else: 78 keys = fieldnames 79 keyDict = {} 80 for key in fieldnames: 81 keyDict[key] = key 82 csvFile = open(filename, "wb") 83 writer = csv.DictWriter(csvFile, fieldnames=keys) 84 if writeTitles: 85 writer.writerow(keyDict) 86 for row in dict: 87 writer.writerow(row) 88 csvFile.close()
89
90 -def readCSV(filename, fieldnames=None):
91 csvFile = open(filename, "rb") 92 reader = csv.DictReader(csvFile, fieldnames=fieldnames) 93 rows = [] 94 while True: 95 try: 96 row = reader.next() 97 rows.append(row) 98 except StopIteration: 99 break 100 csvFile.close() 101 return rows
102
103 -def interpret(data):
104 try: 105 floatValue = float(data) 106 try: 107 intValue = int(data) 108 if floatValue != float(intValue): 109 return floatValue 110 else: 111 return intValue 112 except: 113 return floatValue 114 except: 115 return data
116
117 -def floatToString(data):
118 if isinstance(data,float): 119 return ("%."+str(decimals)+"f") % data 120 else: 121 return data
122
123 -def getLatexString(data):
124 data = interpret(data) 125 data = floatToString(data) 126 string = str(data) 127 string = string.replace("_","\\_") 128 return string
129
130 -def layoutLatex(row, key):
131 return getLatexString(row[key])
132
133 -def writeLatex(dict, filename, keys = None, empty=" ", layout=None, extraHeaderLines=None):
134 if layout == None: 135 layout = layoutLatex 136 137 if not isinstance(dict, list): 138 dict = [dict] 139 if keys == None: 140 keys = getKeys(dict)[0] 141 142 file = open(filename, "wt") 143 file.write("% This file is generated by JariSandbox/ComplexPPI/Source/Utils/TableUtils.py\n") 144 file.write("% DO NOT edit manually, as your changes WILL BE OVERWRITTEN!\n") 145 146 file.write("\\begin{tabular}{ | c | ") 147 for key in keys: 148 file.write(" c |") 149 file.write( "}\n") 150 file.write("\\hline\n") 151 152 # extra header 153 if extraHeaderLines != None: 154 for line in extraHeaderLines: 155 file.write(line+"\n") 156 157 # Header 158 isFirst = True 159 keyDict = {} 160 for key in keys: 161 keyDict[key] = key 162 for key in keys: 163 if isFirst: 164 file.write(layout(keyDict, key)) 165 isFirst = False 166 else: 167 file.write(" & " + layout(keyDict, key)) 168 file.write(" \\\\\n") 169 file.write("\\hline\n") 170 for row in dict: 171 isFirst = True 172 if type(row) == types.StringType: 173 file.write(row) 174 else: 175 for key in keys: 176 if not isFirst: 177 file.write(" & ") 178 else: 179 isFirst = False 180 if row.has_key(key): 181 file.write(layout(row, key)) 182 else: 183 file.write(empty) 184 file.write(" \\\\\n") 185 #file.write("1 & 2 & 3 \\\\\n") 186 #file.write("4 & 5 & 6 \\\\\n") 187 #file.write("7 & 8 & 9 \\\\\n") 188 file.write("\\hline\n") 189 file.write("\\end{tabular}\n") 190 file.close()
191