def readCSV(csvFile, numLabels=0):
  """
  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).
  """
  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