Hey guys,I was thinking about this very problem today.I tried to create a simpler, cleaner interface for straightforward field mapping situations. Using Mathew's code and example as a reference, I came up with the following: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
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
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
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
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)
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)
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.