def pivot(table, left, top, value): """Unnormalize (pivot) a normalised input set of tabular data. @param table: simple list of lists or a L{TabularData} object. Eg. To transform the tabular data like Name, Year, Value ----------------------- 'x', 2004, 1 'y', 2004, 2 'x', 2005, 3 'y', 2005, 4 into the new list: Year, 'x', 'y' ------------------------ 2004, 1, 2 2005, 3, 4 you would do: pivot(tabulardata, 1, 0, 2) OR (requires header to exist): pivot(tabulardata, 'Year', 'Name', 'Value') """ if not isinstance(left, int): left = table.header.index(left) if not isinstance(top, int): top = table.header.index(top) if not isinstance(value, int): value = table.header.index(value) rs = TabularData() # construct double dict keyed by left values tdict = {} xvals = set() yvals = set() for row in table: xval = row[left] if not xval in tdict: tdict[xval] = {} tdict[xval][row[top]] = row[value] xvals.add(xval) yvals.add(row[top]) xvals = sorted(list(xvals)) yvals = sorted(list(yvals)) xhead = 'X' if hasattr(table, 'header') and table.header: xhead = table.header[left] rs.header = [ xhead ] + yvals rs.data = [ [x] + [ tdict[x].get(y, '') for y in yvals ] for x in xvals ] return rs
def pivot(table, left, top, value): """Unnormalize (pivot) a normalised input set of tabular data. @param table: simple list of lists or a L{TabularData} object. Eg. To transform the tabular data like Name, Year, Value ----------------------- 'x', 2004, 1 'y', 2004, 2 'x', 2005, 3 'y', 2005, 4 into the new list: Year, 'x', 'y' ------------------------ 2004, 1, 2 2005, 3, 4 you would do: pivot(tabulardata, 1, 0, 2) OR (requires header to exist): pivot(tabulardata, 'Year', 'Name', 'Value') """ if not isinstance(left, int): left = table.header.index(left) if not isinstance(top, int): top = table.header.index(top) if not isinstance(value, int): value = table.header.index(value) rs = TabularData() # construct double dict keyed by left values tdict = {} xvals = set() yvals = set() for row in table: xval = row[left] if not xval in tdict: tdict[xval] = {} tdict[xval][row[top]] = row[value] xvals.add(xval) yvals.add(row[top]) xvals = sorted(list(xvals)) yvals = sorted(list(yvals)) xhead = 'X' if hasattr(table, 'header') and table.header: xhead = table.header[left] rs.header = [xhead] + yvals rs.data = [[x] + [tdict[x].get(y, '') for y in yvals] for x in xvals] return rs
def read(self, sheet_name='Sheet1'): '''Load the specified google spreadsheet worksheet as a L{TabularData} object. @return L{TabularData} object. ''' text_db_table = self.load_text_db_table(sheet_name) tdata = TabularData() text_db_table.LookupFields() tdata.header = text_db_table.fields # finds all records it seems rows = text_db_table.FindRecords('') for row in rows: rowdata = [] for colname in tdata.header: rowdata.append(row.content[colname]) tdata.data.append(rowdata) return tdata
def read(self, sheet_name='Sheet1'): '''Load the specified google spreadsheet worksheet as a L{TabularData} object. @return L{TabularData} object. ''' text_db_table = self.load_text_db_table(sheet_name) tdata = TabularData() text_db_table.LookupFields() tdata.header = text_db_table.fields # finds all records it seems rows = text_db_table.FindRecords('') for row in rows: rowdata = [] for colname in tdata.header: rowdata.append(row.content[colname]) tdata.data.append(rowdata) return tdata