Sanitize Filename (arcgis scripting)

I asked ESRI-L if there were an arcgisscripting method for sanitizing a filename to get rid of characters which Arcgis barfs on, the meek hyphen (-) for example. It turns out there is: ValidateTableName_method ( and here is how one could use it:
  import arcgisscripting
  gp = arcgisscripting.create()
  outshape = 'c:/temp/%s.shp' % gp.ValidateTableName('My-Merge-Output')
  print outshape
  >>> c:/temp/My_Merge_Output.shp

One needs to be careful to only process the filename, and not include the path or extension else periods and slashes will be replaced also:
  outshape = gp.ValidateTableName('c:/temp/My-Merge-Output.shp')
  print outshape
  >>> c__temp_My_Merge_Output_shp

Don’t run validate on an input file though. Some experiments showed that a hyphenated filename is legal on input and illegal on output. Also see the related ValidateFieldName_method

If you need to process path and filename you might try this (see this ESRI Forum thread for a version with proper linewrap):
import os, string, arcgisscripting
gp = arcgisscripting.create()
def validateName(inputTablePath):
    workspacePath = string.join(inputTablePath.split(os.sep)[0:-1], os.sep)
    if inputTablePath[-4:] in (".shp",".dbf",".txt"):
        tableNameToValidate = inputTablePath.split(os.sep)[-1][0:-4]
        return workspacePath + os.sep + gp.validatetablename(tableNameToValidate, workspacePath) + inputTablePath[-4:]
        tableNameToValidate = inputTablePath.split(os.sep)[-1]
        return workspacePath + os.sep + gp.validatetablename(tableNameToValidate, workspacePath)
print validateName(r"C:\temp\testthis\why-not-this.shp")
print validateName(r"C:\temp\testthis\_*howboutwhy-not-this.shp")
print validateName(r"C:\temp\testthis\why-not-this.dbf")
print validateName(r"C:\temp\testthis.gdb\why-not-this")

Thank you Chris Snyder, Conrad J. Wyrzykowski, Luke Pinner, Jason Scheirer, Peter Siebert for contributing to this answer and Matt’s education. (ESRI-L)

Leave a Reply

Your email address will not be published. Required fields are marked *