很多地理处理工具的输入参数可接受多个值。在 Python 窗口中查看工具引用页面或工具用法时,用括号 [ ] 括起来的参数表示其可接受值列表。例如,删除字段工具可接受要删除的字段列表,参数用法为 [drop_field, ...]。某些参数(如联合工具的 input_features 参数)接受列表的列表。其用法显示为 [[in_features, {Rank}], ...]。
任何可接受值列表(或值列表的列表)的参数即为多值参数;可接受一个或多个值。可通过三种方式来指定多值参数:
- 列表形式,每个值都是列表的元素
- 字符串形式,各个值用分号进行分隔
- ValueTable 形式,各个值存储在一个由行和列组成的虚拟表中
以下为相应的示例。
列表形式
在脚本中,可将多值输入以列表形式进行传递。列表用括号括起来,为灵活的 Python 类型。
drop_field 参数使用 Python 列表的 DeleteFields
import arcpy
arcpy.env.workspace = 'C:/base/county.gdb'
arcpy.DeleteField_management('roads', ['STREET_NAM', 'LABEL', 'CLASS'])
in_features 参数使用 Python 列表的 Union
import arcpy
arcpy.env.workspace = 'C:/base/data/gdb'
arcpy.Union_analysis([['counties', 2],['parcels', 1]], 'state_landinfo')
字符串形式
某些情况下,脚本可能需要使用多值字符串,因为它可能会以工具的输出值形式返回,或者以脚本输入参数的形式进行传递。
drop_field 参数使用多值字符串的 DeleteFields
import arcpy
arcpy.env.workspace = 'C:/base/county.gdb'
arcpy.DeleteField_management('roads', 'STREET_NAM;LABEL;CLASS')
in_features 参数使用多值字符串的 Union
import arcpy
arcpy.env.workspace = 'C:/base/data/gdb'
arcpy.Union_analysis('counties 2;parcels 1', 'state_landinfo')
ValueTable 形式
ValueTable 允许将值组织到一个由行和列组成的虚拟表中。创建值表时需指定列数。默认为单列。
drop_field 参数使用 ValueTable 的 DeleteFields
import arcpy
arcpy.env.workspace = 'C:/base/county.gdb'
vt = arcpy.ValueTable()
vt.addRow('STREET_NAM')
vt.addRow('LABEL')
vt.addRow('CLASS')
arcpy.DeleteField_management('roads', vt)
in_features 参数使用 ValueTable 的 Union
import arcpy
arcpy.env.workspace = 'C:/base/data/gdb'
vt = arcpy.ValueTable(2)
vt.addRow('counties 2')
vt.addRow('parcels 1')
arcpy.Union_analysis(vt, 'state_landinfo')