code: def prune_taxonomy(taxF, level):
      
      uniqueTax = {}
      nuTax = {}  # non-unique taxonomies
  
      for i, line in enumerate(taxF):
          try:
              otuID, tax, floatVal, otuIDr = line.strip().split('\t')
          except ValueError as ve:
              print "ERROR: incorrect number of fields found on line {} of the input file. Entry skipped.".format(i)
              continue
          tax = split_taxonomy(pad_taxonomy(tax), level)
          if tax not in uniqueTax:
              uniqueTax[tax] = otuID, floatVal, otuIDr
              nuTax[uniqueTax[tax][0]] = []
          else:
              nuTax[uniqueTax[tax][0]].append(otuID)
  
      ut = {otuID: [tax, floatVal, otuIDr] for tax, (otuID, floatVal, otuIDr) in
            uniqueTax.iteritems()}
  
      return ut, nuTax
docs: :type taxF: file
      :param taxF: The taxonomy output file to parse
      :type level: string
      :param level: The level of the phylogenetic assignment at which to cut off
                     every assigned taxonomic string.
  
      :rtype: dict
      :return: A dictionary of taxonomy strings keyed on OTU ID