Assuming you want to split any field with an underscore you can use ListFileds (which returns Field Objects) with a wildcard to get the fields to split then string.split("_") to break it up into parts then calculate with quotes to populate the string:
import arcpy, os, sys
InFolder = sys.argv[1] # folder for shapefiles, or database for feature classes
arcpy.env.workspace = InFolder
for ThisFC in arcpy.ListFeatureClasses():
# assuming any field with an underscore needs to be split
SplitFields = arcpy.ListFields(ThisFC,"*_*")
# iterate through each field found with an underscore
for ThisField in SplitFields:
# skip shape length and shape area fields
if not ThisField.baseName.lower() == "shape_length" and not ThisField.baseName.lower() == "shape_area" :
# break it up into parts
Parts = ThisField.baseName.split("_")
for ThisPart in Parts:
# Add a field for each part
arcpy.AddField_management(ThisFC,ThisPart,"TEXT",field_length = 30)
# populate with the part ("\"" is a quote). In order to put a string into
# a field it is necessary to quote it so the processor understands that it's
# a string to be populated and not a field name..
arcpy.CalculateField_management(ThisFC,ThisPart,"\"" + ThisPart + "\"","PYTHON")
Note, there's no error checking here, if a field already exists it will fall over. A try/catch on the addfield would fix that but in this case you'd possibly want to skip the whole bit... if you use ListFields with the full field name it can be used like a boolean:
DoesFieldExist = arcpy.ListFields("FullFieldName")
if not DoesFieldExist: