Como verificar se a classe ou tabela de recursos contém um campo com um nome específico antes de adicioná-lo?

8

Estou tentando escrever um script que descubra se o shapefile possui um campo específico e se não é para adicioná-lo. Consigo que ele me mostre o campo, mas o loop passa por cada campo, para criar um novo campo sempre que o campo especificado não estiver lá. Mas se houver, só quero dizer que está lá e se não é para criar um novo campo. Até agora, meu código diz:

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

(imprime desta forma, existem cinco campos)

Meu código até agora:

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

for field in fieldList:

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

else: 
    "then add new field"
user23879
fonte
1
Esse código realmente corresponde a essa saída. Não conheço o arcpy, mas parece altamente duvidoso.
BradHards

Respostas:

10

Em vez de fazer um loop sobre os nomes dos campos atuais, você pode fazer um loop sobre os nomes dos campos que deseja adicionar. Digamos que você tenha uma lista, to_addcontendo os nomes dos campos que você deseja que sua classe de recurso. Então você pode usar a indeclaração para verificar se cada item to_addé fieldList. O seguinte deve 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")
Paulo
fonte