Comment vérifier si la classe d'entités ou la table contient un champ avec un nom spécifique avant de l'ajouter?


8

Im essayant d'écrire un script qui découvre si le fichier de formes a un champ spécifique et sinon d'ajouter le champ. Je l'obtiens pour me montrer le champ, mais la boucle passe par chaque champ, donc cela créerait un nouveau champ chaque fois que le champ spécifié n'est pas là. Mais si c'est là, je veux juste qu'il dise qu'il est là et que ce n'est pas pour créer un nouveau champ. Jusqu'à présent, mon code dit simplement:

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

(imprime comme ceci car il y a cinq champs)

Mon code jusqu'à présent:

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

for field in fieldList:

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

else: 
    "then add new field"

1
Ce code correspond-il vraiment à cette sortie? Je ne connais pas arcpy, mais cela semble très douteux.
BradHards

Réponses:


10

Au lieu de boucler sur les noms de champs actuels, vous pouvez boucler sur les noms de champs que vous souhaitez ajouter. Supposons que vous ayez une liste to_addcontenant les noms de champ que vous voulez que votre classe d'entités ait. Vous pouvez ensuite utiliser l' ininstruction pour vérifier si chaque élément de to_addest dedans fieldList. Les éléments suivants devraient fonctionner:

#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")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.