使用ArcGIS Pro在Field Calculator中定位子字符串

问题描述 投票:0回答:1

我有一个相当简单的操作,但在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:
        ''
python gis arcgis arcmap
1个回答
0
投票

我不熟悉arcgis,但是非常了解Python。

在Python中,应避免将变量或参数命名为任何内置函数,info()是内置函数的名称。另外,之后的行最后的else:应该是return ''。既然不是这样,您的当没有匹配项时,函数将有效地返回Nonenot空字符串''

请记住,这将是编写函数的更好方法(甚至更高级的方法可能是使用正则表达式:]

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 ''
© www.soinside.com 2019 - 2024. All rights reserved.