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 に答える