我正在尝试为工具箱编写一个简单的脚本,类似于Addfield_datamanagement
工具箱。该脚本将新要素添加到要素类的表或带有属性表的shapefile
。
到目前为止一切都很好。
# Import system modules
import arcpy
#Workspace
arcpy.env.workspace="C:\\Users\\xxx.gdb"
# Set feature class
inputFC = arcpy.GetParameterAsText(0)
# Get List of Fieldnames
inputString =arcpy.GetParameterAsText(1)
inputString =arcpy.ValidateFieldName(inputString,arcpy.env.workspace)
fieldList =inputString.split(";")
fieldType = arcpy.GetParameterAsText(2)
for fieldName in fieldList:
arcpy.AddField_management(inputFC , fieldName, fieldType)
arcpy.AddMessage("Field generated:" + fieldName)
arcpy.AddMessage ("Script executed")
所以这似乎有效,但现在我想首先检查fieldname
在创建之前是否已经存在并打印现有名称!
我想到了列表字段以及内置的len()
函数:
if len(arcpy.ListFields(inputFC,?)==1: #not sure if inputFC is right?
arcpy.AddMessage("Field already exists"+fieldName)
不确定ListFields
命令的语法以及如何将其集成到上面的代码中!所以,欢迎任何帮助和赞赏!
答案 0 :(得分:2)
ListFields
返回list
个字段对象,其中每个对象都与attributes关联。
所以结构看起来像这样:
field_list = [field object1: field.name, field.type, etc...;
field object2: field.name, field.type, etc...;
]
您可能希望访问每个字段对象的.name
属性,以确定它是否与变量fieldList
中的任何名称匹配。
首先,生成一个字段名称列表:
existingFields = [] # empty list
for field in arcpy.ListFields(inputFC): # iterate over fields
existingFields.append(field.name) # add the attribute name to list for each field
接下来,将现有字段列表与用户想要添加的字段列表进行比较:
duplicateFields = set(existingFields) & set(fieldList)
if len(duplicateFields) == 0:
carry on with adding fields
else:
arcpy.AddMessage('Field(s) already exist: ' + duplicateFields)