block_out = str(sel)+"_blocks"
field_mappings = arcpy.FieldMappings()
field_mappings.addTable(block_lyr)
fldmap_OBJID = arcpy.FieldMap()
fldmap_BLOCKSTAGE = arcpy.FieldMap()
fldmap_AREAGIS = arcpy.FieldMap()
fldmap_OPTYPE = arcpy.FieldMap()
fldmap_BLOCKTYPE = arcpy.FieldMap()
fldmap_HARVSEASON = arcpy.FieldMap()
fldmap_ROADPERCNT = arcpy.FieldMap()
#fldmap_SOURCEID = arcpy.FieldMap(8,"","Join")
fldmap_OBJID.addInputField(block_lyr, "OBJECTID")
fld_OBJID = fldmap_OBJID.outputField
fld_OBJID.name = "O_OID"
fldmap_OBJID.outputField = fld_OBJID
field_mappings.addFieldMap(fldmap_OBJID)
fldmap_BLOCKSTAGE.addInputField(block_lyr, "BLOCKSTAGE")
fld_BLOCKSTAGE = fldmap_BLOCKSTAGE.outputField
fld_BLOCKSTAGE.name = "BLOCKSTAGE"
fldmap_BLOCKSTAGE.outputField = fld_BLOCKSTAGE
field_mappings.addFieldMap(fldmap_BLOCKSTAGE)
fldmap_AREAGIS.addInputField(block_lyr, "AREAGIS")
fld_AREAGIS = fldmap_AREAGIS.outputField
fld_AREAGIS.name = "AREAGIS"
fldmap_AREAGIS.outputField = fld_AREAGIS
field_mappings.addFieldMap(fldmap_AREAGIS)
fldmap_OPTYPE.addInputField(block_lyr, "OPERATIONSTYPE")
fld_OPTYPE = fldmap_OPTYPE.outputField
fld_OPTYPE.name = "OPTYPE"
fldmap_OPTYPE.outputField = fld_OPTYPE
field_mappings.addFieldMap(fldmap_OPTYPE)
fldmap_BLOCKTYPE.addInputField(block_lyr, "BLOCKTYPE")
fld_BLOCKTYPE = fldmap_BLOCKTYPE.outputField
fld_BLOCKTYPE.name = "BLOCKTYPE"
fldmap_BLOCKTYPE.outputField = fld_BLOCKTYPE
field_mappings.addFieldMap(fldmap_BLOCKTYPE)
fldmap_HARVSEASON.addInputField(block_lyr, "HARVESTSEASON")
fld_HARVSEASON = fldmap_HARVSEASON.outputField
fld_HARVSEASON.name = "HARVSEASON"
fldmap_HARVSEASON.outputField = fld_HARVSEASON
field_mappings.addFieldMap(fldmap_HARVSEASON)
fldmap_ROADPERCNT.addInputField(block_lyr, "ROADPERCENTAGE")
fld_ROADPERCNT = fldmap_ROADPERCNT.outputField
fld_ROADPERCNT.name = "ROADPERCNT"
fldmap_ROADPERCNT.outputField = fld_ROADPERCNT
field_mappings.addFieldMap(fldmap_ROADPERCNT)
for selection in blocklist:
if blockPrev <> selection and not arcpy.Exists(block_out+".shp"):
block_query = ("\""+str(block_id)+"\" = \'"+str(selection)+"\' AND (BLOCKSTAGE = 'APPR')")
arcpy.FeatureClassToFeatureClass_conversion(block_lyr, exportdir, block_out, block_query, field_mappings)dropFields = list() fieldList = arcpy.ListFields(block_out+".shp") keep_list = ["O_OID","SOURCEID","BLOCKTYPE","ROADPERCNT","BLOCKSTAGE","AREAGIS","OPERATIONS","HARVSEASON","OBJECTID","PLANNEDVOL","OID","Geometry"] for f in fieldList: #print f.name if f.name not in keep_list and f.type not in keep_list: dropFields.append(f.name) #print dropFields arcpy.DeleteField_management(block_out+".shp", dropFields)
def GetFieldMappings(fc_in, fc_out, dico): field_mappings = arcpy.FieldMappings() field_mappings.addTable(fc_in) for input, output in dico.iteritems(): field_map = arcpy.FieldMap() field_map.addInputField(fc_in, input) field = fieldmap.outputField field.name = output field_map.outputField = field field_mappings.addFieldMap(field_map) del field, field_map return field_mappings
fc_in = r'C:/input.shp'
fc_out = r'C:/output_blocks.shp'
dico = {'OBJECTID': 'O_OID',
'BLOCKSTAGE': 'BLOCKSTAGE',
'AREAGIS': 'AREAGIS',
'OPERATIONSTYPE': 'OPTYPE',
'BLOCKTYPE': 'BLOCKTYPE',
'HARVESTSEASON': 'HARVSEASON',
'ROADPERCENTAGE': 'ROADPERCNT'}
Mapper = GetFieldMappings(fc_in, fc_out, dico)def GetFieldMappings(fc_in, fc_out, dico): field_mappings = arcpy.FieldMappings() field_mappings.addTable(fc_in) for input, output in dico.iteritems(): field_map = arcpy.FieldMap() field_map.addInputField(fc_in, input) field = field_map.outputField # Missing underscore field.name = output field_map.outputField = field field_mappings.addFieldMap(field_map) del field, field_map return field_mappings
def FieldNameMap(tbl, maps):
"""Create a field mappings object to rename, drop, or re-order fields.
Arguments
tbl - input feature class, table, or table view
maps - field names map list (';'-delimited string)
If a field is left out, it will not be included in the field map
Example
import arcpy
Maps = "Shape_Area AREA;BID BID2;AREASQMI AREAMI2"
Mapper = FieldNameMap("temp.dbf", Maps)
# to debug: print out the field mapping
print Mapper.exportToString().replace(";","\n")
# copy table, keeping only renamed fields: AREA, BID2, AREAMI2
arcpy.Merge_management("temp.dbf","temp2.dbf",Mapper)
Author
Curtis Price, U.S. Geological Survey, cprice@usgs.gov
Not reviewed/approved use at your own risk
"""
field_mappings = arcpy.FieldMappings()
mapList = Maps.split(';')
for rec in mapList:
fromName,toName = rec.split()
# create a new field map
field_map = arcpy.FieldMap()
# populate it and add to field_mappings
try:
field_map.addInputField(fc_in, fromName)
field = field_map.outputField
field.name = toName
field_map.outputField = field
field_mappings.addFieldMap(field_map)
except:
raise Exception, "Cannot not map fields (%s) in %s" % (rec,tbl)
return field_mappings