code: def fix(args):
      
      p = OptionParser(fix.__doc__)
      p.add_option("--ignore_sym_pat", default=False, action="store_true",
          help="Do not fix names matching symbol patterns i.e." + \
          " names beginning or ending with gene symbols or a series of numbers." + \
          " e.g. `ARM repeat superfamily protein`, `beta-hexosaminidase 3`," + \
          " `CYCLIN A3;4`, `WALL ASSOCIATED KINASE (WAK)-LIKE 10`")
      p.set_outfile()
      opts, args = p.parse_args(args)
  
      if len(args) < 1:
          sys.exit(not p.print_help())
  
      csvfile, = args
      fp = open(csvfile)
      fw = must_open(opts.outfile, "w")
      for row in fp:
          if row[0] == '#':
              continue
          if row.strip() == "":
              continue
          atoms = row.rstrip("\r\n").split("\t")
          name, hit, ahrd_code, desc = atoms[:4] \
                  if len(atoms) > 2 else \
                  (atoms[0], None, None, atoms[-1])
  
          newdesc = fix_text(desc, ignore_sym_pat=opts.ignore_sym_pat)
          if hit and hit.strip() != "" and newdesc == Hypothetical:
              newdesc = "conserved " + newdesc
          print("\t".join(atoms[:4] + [newdesc] + atoms[4:]), file=fw)
docs: %prog fix ahrd.csv > ahrd.fixed.csv
  
      Fix ugly names from Uniprot.