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

0 投票
1 回答
1402 浏览
提问于 2025-04-18 03:37

我正在尝试写一个简单的脚本,用于一个工具箱,类似于 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 个回答

2

ListFields 会返回一个字段对象的列表,每个字段对象都有一些相关的属性

所以它的结构大概是这样的:

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)

撰写回答