¿Cómo verificar si la clase de entidad o tabla contiene un campo con un nombre específico antes de agregarlo?

8

Estoy tratando de escribir un script que descubra si el archivo de forma tiene un campo específico y, si no, agregar el campo. Obtengo que me muestre el campo, pero el bucle pasa por cada campo, por lo que crearía un nuevo campo cada vez que el campo especificado no esté allí. Pero si es así, solo quiero que diga que está allí y que no es para crear un nuevo campo. Mi código hasta ahora solo dice:

"not filled in yet"
"not filled in yet"
"not filled in yet"
"cities.shp"
"not filled in yet"

(se imprime así porque hay cinco campos)

Mi código hasta ahora:

fieldList = arcpy.ListFields("cities.shp")

for field in fieldList:

if field.name == "CAPITAL":
    print "cities.shp"

else: 
    "then add new field"
usuario23879
fuente
1
¿Ese código realmente coincide con esa salida? No estoy familiarizado con arcpy, pero parece muy dudoso.
BradHards

Respuestas:

10

En lugar de recorrer los nombres de campo actuales, puede recorrer los nombres de campo que desea agregar. Supongamos que tiene una lista que to_addcontiene los nombres de campo que desea que tenga su clase de entidad. Luego puede usar la indeclaración para verificar si cada elemento to_addestá dentro fieldList. Lo siguiente debería funcionar:

#List of field names to be added
to_add = ["Area", "Date_add", "User_add", "etc."]

#Create a list of existing field names
fieldList = arcpy.ListFields("cities.shp")    
fieldName = [f.name for f in fieldList]

for field in to_add:
  if field in fieldName:
    print "Already exists!"
  else:
    arcpy.AddField_management("cities.shp", field, "TEXT")
Pablo
fuente