我有一个相当简单的操作,但在ArcGIS Pro 2.4中失败了,并且我一生都无法找出原因。
如果字段“ assettype”包含搜索字符串的一部分,则将assettype_groupup的值设置为我返回的值。
例如,如果“ assetttype”包含字符串“ Building | Residential | Large”,并且我测试它是否包含术语“ Residential”,并且计算结果为true,则返回字符串“ Residential”。
当前该代码似乎没有返回任何结果/没有任何效果,并且似乎运行得太快了(3,000,000行需要2-3秒)。
[如果我尝试三元声明,这意味着一次使用一个术语,那么看起来就很好。我宁愿不采用这种方法,因为if / elif可能性本质上可能会变得很广泛,并且我只想运行一次例程。
您能否看到下面的设置有任何明显的问题
#Target Field Name
assettype_groupup
#Expression
func(!assettype!)
# Code block
def func(input):
if 'Residential' in input:
return 'Residential'
elif 'Industrial/Utilities' in input:
return 'Industrial/Utilities'
elif 'Transport/Infrastructure' in input:
return 'Transport/Infrastructure'
elif 'Conservation/National Park' in input:
return 'Conservation/National Park'
elif 'Recreational/Open Space' in input:
return 'Recreational/Open Space'
elif 'Mixed Use' in input:
return 'Mixed Use'
elif 'Community Use' in input:
return 'Community Use'
elif 'Rural/Primary Production' in input:
return 'Rural/Primary Production'
elif 'Special Use' in input:
return 'Special Use'
elif 'Unknown' in input:
return 'Unknown'
else:
''
我不熟悉arcgis,但是非常了解Python。
在Python中,应避免将变量或参数命名为任何内置函数,info()
是内置函数的名称。另外,之后的行最后的else:
应该是return ''
。既然不是这样,您的当没有匹配项时,函数将有效地返回None
,not空字符串''
。
请记住,这将是编写函数的更好方法(甚至更高级的方法可能是使用正则表达式:]
TARGETS = (
'Residential',
'Industrial/Utilities',
'Transport/Infrastructure',
'Conservation/National Park',
'Recreational/Open Space',
'Mixed Use',
'Community Use',
'Rural/Primary Production',
'Special Use',
'Unknown',
)
# Code block
def func(info):
for target in TARGETS:
if target in info:
return target
else: # Nothing matched.
return ''