code: def smart_reroot(treefile, outgroupfile, outfile, format=0):
      
      tree = Tree(treefile, format=format)
      leaves = [t.name for t in tree.get_leaves()][::-1]
      outgroup = []
      for o in must_open(outgroupfile):
          o = o.strip()
          for leaf in leaves:
              if leaf[:len(o)] == o:
                  outgroup.append(leaf)
          if outgroup:
              break
  
      if not outgroup:
          print("Outgroup not found. Tree {0} cannot be rerooted.".format(treefile), file=sys.stderr)
          return treefile
  
      try:
          tree.set_outgroup(tree.get_common_ancestor(*outgroup))
      except ValueError:
          assert type(outgroup) == list
          outgroup = outgroup[0]
          tree.set_outgroup(outgroup)
      tree.write(outfile=outfile, format=format)
  
      logging.debug("Rerooted tree printed to {0}".format(outfile))
      return outfile
docs: simple function to reroot Newick format tree using ete2
  
      Tree reading format options see here:
      http://packages.python.org/ete2/tutorial/tutorial_trees.html#reading-newick-trees