使用Python的

时间:2016-07-13 13:22:45

标签: python arcgis calculated-field

我在ArcGIS 10.2中使用字段计算的表达式时遇到问题。我已经尝试过使用Python编写的代码,但是由于我在ArcGIS中应用代码所做的小改动不会起作用。

PGIS_TXT是一列字符串,如下所示,第一个数字是一个包裹的分子,我想用Python表达式提取该字符串。

PGIS_TXT = ["31\c\u\n\2","22","1","134","23\c\u\n\1"] 


import re
def getnumerator(PGIS_TXT):

if (len( PGIS_TXT ) > 3):
    p=map(int, re.findall('\d+', PGIS_TXT ))
    b=p[:-1]
    return b
else:
    b= int(PGIS_TXT)
    return b

这些数字应存储在我的专栏flur_za中:

flur_za = getnumerator(!PGIS_TXT!)

结果应为:

[31, 22, 1, 134, 23]

我收到标准错误"Error 999999"和消息"The field is not nullable [flur_za]"

代码有什么问题?

1 个答案:

答案 0 :(得分:0)

此代码对我有用:

def getnumerator(PGIS_TXT):

import re
if len(PGIS_TXT) > 3:
    p = map(str, re.findall('\d+',PGIS_TXT))
    z=p[:1]
    b=int(''.join(z))
else:
    if len(PGIS_TXT)==3:
        b=int(PGIS_TXT[:3])
    else:
        if len(PGIS_TXT)==2:
            b= int(PGIS_TXT[:2])
        else:
            if len(PGIS_TXT)==1:
                b= int(PGIS_TXT[:1])
return b

我认为这个问题属于第一个if条件。我用map方法得到一个带整数值的列表,但我需要一个整数值。 .join方法有助于摆脱列表。