[GIS] Batch renaming of feature datasets, and feature classes based on new dataset name

arcgis-10.0arcgis-desktoparcpy

I need to create a python script (or model) that would first rename all the feature datasets in a gdb. The feature dataset is in a set format and I need to change the prefix of the dataset.

For example: from "H2611111:xxx" to "gen26_xxx"
– where xxx is the string that I need to keep and prefix of "H2611111" is a constant that I need to replace with "gen26_".

Once this is completed, I would then need to rename each feature class inside each renamed dataset. The feature classes needs to be prefixed with the newly renamed dataset separated by an underscore.

For example:

in dataset gen26_xxx:

from "test1" to  "gen26_xxx_test1" 
from "test2" to  "gen26_xxx_test2" 

in dataset gen26_zzz:

from "new1" to  "gen26_zzz_new1" 

I am using ArcGIS Desktop 10 and 9.3.1.

Best Answer

A good solution is a combination of ListDatasets() and Rename().

The basic solution is:

  1. Set your workspace
  2. Use arcpy.ListDatasets() to get a list of all datasets.
  3. Loop through the datasets list
  4. For each dataset in the list, call arcpy.Rename_management(oldName, newName)
  5. If the names are as you stated in your post, then the newName is 'gen26_' + oldName.split(':')[1]

To do the same now for each feature class within the datasets.

  1. Set your workspace
  2. Use arcpy.ListDatasets() to get a list of all the datasets (since you just renamed them)
  3. For each dataset in the list, change the workspace to be that dataset
  4. Now call arcpy.ListFeatureClasses() to get a list of the feature classes
  5. Use arcpy.Rename_management() like above with the new name

Note you can easily combine the above steps if you list datasets, list the feature classes in the workspace, rename all the feature classes, and now you can rename the dataset as well. For more on string manipulation, read here