test_dbf = "C:\\TempData\\testdata.dbf" data_description = arcpy.Describe(test_dbf) fields = [f.name for f in data_description.fields if f.type not in ["Geometry", "Raster", "Blob"]] #fields = [f.name for f in arcpy.ListFields(test_dbf) <> 'Geometry'] # This didn't work either print fields for i,f in enumerate(fields): if f == 'OID' or f == 'FREQUENCY' or f == 'COUNT': del fields
I have a dbf table with four fields: OID,TYPE,FREQUENCY,COUNT.
I only want to keep TYPE.
test_dbf = "C:\\TempData\\testdata.dbf" # one of more fields to keep in a list keepers = ["TYPE"] # list all field delete candidates fields = [f.name for f in arcpy.Describe(test_dbf).Fields \ if f.type not in ["Geometry, "Raster", "BLOB", "OID"]] # remove TYPE field from delete list fields = [f for f in fields if f.upper() not in keepers] arcpy.DeleteFields_management(test_dbf, fields)
This should do what you want (except you can't delete the object ID field):test_dbf = "C:\\TempData\\testdata.dbf" # one of more fields to keep in a list keepers = ["TYPE"] # list all field delete candidates fields = [f.name for f in arcpy.Describe(test_dbf).Fields \ if f.type not in ["Geometry, "Raster", "BLOB", "OID"]] # remove TYPE field from delete list fields = [f for f in fields if f.upper() not in keepers] arcpy.DeleteFields_management(test_dbf, fields)