如何使用工具箱脚本的列表字段功能?

时间:2014-04-21 16:27:24

标签: python arcgis arcpy

我正在尝试为工具箱编写一个简单的脚本,类似于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命令的语法以及如何将其集成到上面的代码中!所以,欢迎任何帮助和赞赏!

1 个答案:

答案 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)