code: def readCSV(csvFile, numLabels=0):
    
    try:
      with open(csvFile, "rU") as f:
        reader = csv.reader(f)
        headers = next(reader, None)
        try:
          sampleIdx = headers.index("Sample")
          idIdx = headers.index("ID")
        except ValueError as e:
          print ("Could not find 'ID' and/or 'Sample' columns, so assuming "
                 "they are 0 and 2, respectively.")
          sampleIdx = 2
          idIdx = 0
        
        dataDict = {}
  
        if numLabels > 0:
          labelIdx = range(sampleIdx + 1, sampleIdx + 1 + numLabels)
          for lineNumber, line in enumerate(reader):
            dataDict[lineNumber] = (line[sampleIdx],
                                    [line[i] for i in labelIdx if line[i]],
                                    line[idIdx])
        else:
          for lineNumber, line in enumerate(reader):
            dataDict[lineNumber] = (line[sampleIdx], [], line[idIdx])
  
        return dataDict
  
    except IOError as e:
      print e
docs: Read in a CSV file w/ the following formatting:
      - one header row
      - one page
      - one column of samples, followed by column(s) of labels
  
    @param csvFile         (str)          File name for the input CSV.
    @param numLabels       (int)          Number of columns of category labels.
    @return                (dict)         Keys are sample IDs, values are 3-tuples
                                          of sample (str), categories (list of
                                          str), sample number (int).