1

我是 python 脚本的新手,我主要在 ArcGIS 10 中使用它。我的脚本应该重新格式化字段 CINTP1 中的字符串。一个示例是“000000100”并返回“1.00”。我已将它导入到工具箱中,以便在表 'MAPCHAR' 中的选定记录上运行。我不断收到的错误是:

:错误000539:错误运行表达式:removeLeadingZeros(“000000100”):未定义全局名称're'执行失败(CalculateField)。

执行失败(脚本)。

这是我的脚本:

import arcpy, re, sys, string, os

MAPCHAR = "MAPCHAR"

CINPT1 = "CINPT1"

expression = "removeLeadingZeros(!CINPT1!)"
codeblock = """def removeLeadingZeros(myValue):
    newValue = re.sub('^0+',"",myValue)

    valueList = list(newValue) #convert newValue to List
    valueList.insert(-2, '.') #insert the '.' characater int the list at the -2 position

    newValue = "".join(valueList) #join back to create the new  updated string

    myvalue = newValue"""

arcpy.CalculateField_management(MAPCHAR, CINPT1, expression, "Python", codeblock)

任何帮助将不胜感激..谢谢,

4

2 回答 2

1

你应该在下面的代码块中有你的导入语句。所以import re在代码块的第一行添加一个: -

codeblock = """import re
    def removeLeadingZeros(myValue):
        newValue = re.sub('^0+',"",myValue)

        valueList = list(newValue) #convert newValue to List
        valueList.insert(-2, '.') #insert the '.' int the list at the -2 position

        newValue = "".join(valueList) #join back to create the new  updated string

        myvalue = newValue"""
于 2012-10-04T18:37:09.280 回答
0

看起来您正在codeblockarcpy 命名空间中运行。如果 arcpy 中没有import re,将codeblock无法工作。

顺便说一句,您不需要正则表达式来删除前导零 - 只需转换为 int。使用扳手敲钉子的经典例子。

于 2012-10-04T18:36:45.793 回答