def getColumns(inFile, delim="\t", header=True): """ Get columns of data from inFile. The order of the rows is respected :param inFile: column file separated by delim :param header: if True the first line will be considered a header line :returns: a tuple of 2 dicts (cols, indexToName). cols dict has keys that are headings in the inFile, and values are a list of all the entries in that column. indexToName dict maps column index to names that are used as keys in the cols dict. The names are the same as the headings used in inFile. If header is False, then column indices (starting from 0) are used for the heading names (i.e. the keys in the cols dict) """ cols = {} indexToName = {} for lineNum, line in enumerate(inFile): if lineNum == 0: headings = line.split(delim) i = 0 for heading in headings: heading = heading.strip() if header: cols[heading] = [] indexToName[i] = heading else: # in this case the heading is actually just a cell cols[i] = [heading] indexToName[i] = i i += 1 else: cells = line.split(delim) i = 0 for cell in cells: cell = cell.strip() cols[indexToName[i]] += [cell] i += 1 return cols, indexToName