我在Python(ArcPy(中执行Calculate字段命令时遇到问题。我找不到任何相关的资源或有用的描述。我希望有人能帮我。
inFeatures = r"H:Python ProjectsPycharmProjectsArcPyTest_OutputTrial_out.gdbTrail_Data_A.shp"
arcpy.CalculateField_management(inFeatures, 'ObjArt_Ken', '!AttArt_Ken!'.split('_')[0])
arcpy.CalculateField_management(inFeatures, 'Wert', '!AttArt_Ken!'.split('_')[-1])
我运行命令时遇到的错误是
arcgisscripting.ExecuteError: Error during execution. Parameters are invalid.
ERROR 000989: The CalculateField tool cannot use VB expressions for services.
Error while executing (CalculateField).
我使用的是ArcGIS Pro 2.8和Python 2.7
您的问题在于这两个表达式:'!AttArt_Ken!'.split('_')[0]
和'!AttArt_Ken!'.split('_')[-1]
。
在"计算字段"工具中编写表达式时,必须输入包含
代码示例的单个字符串。您想要拆分字段中包含的文本,因此,您需要编写
字段的名称(用感叹号括起来(,然后在上面执行拆分方法。
正确的方法是:
inFeatures = r"...Trail_Data_A.shp"
arcpy.CalculateField_management(inFeatures, 'ObjArt_Ken', "!AttArt_Ken!.split('_')[0]")
arcpy.CalculateField_management(inFeatures, 'Wert', "!AttArt_Ken!.split('_')[1]")
注意:值得检查路径是否是形状文件的有效路径。您发布的内容显示了File Geodatabase(r"...Trial_out.gdbTrail_Data_A.shp"
(中的一个shapefile,这是没有意义的。
我找到了上述问题的工作输出
inTable = r'H:Python ProjectsPycharmProjectsArcPyTest_OutputTrial_out.gdbTrail_Data_A.shp'
func_1 = "'!AttArt_Ken!'.split('_')[0]"
field_1 = "ObjArt_Ken"
func_2 = "'!AttArt_Ken!'.split('_')[1]"
field_2 = "Wert"
arcpy.AddField_management(inTable, field_1, "TEXT".encode('utf-8'))
arcpy.CalculateField_management(inTable, field_1, func_1, "PYTHON_9.3")
arcpy.AddField_management(inTable, field_2, "TEXT".encode('utf-8'))
arcpy.CalculateField_management(inTable, field_2, func_2, "PYTHON_9.3")
但是仍然存在这样一个问题,即输出(After split函数(如下|ObjArt_Ken|Wert||:---|:---||u〃;31001|1001"|
我仍然想不出删除unicode或"的方法来自所需输出的符号
由于我还不能发表评论,我将不得不使用Answer发表几条评论
你需要澄清,";我使用的是ArcGIS Pro 2.8和Python 2.7;ArcGIS Pro一直与Python 3.x捆绑在一起,ArcGIS Desktop/ArcMap也一直与Python 2.x绑定在一起。无法使用ArcGIS Pro和Python 2.7。给出错误消息后,您似乎正在运行某种版本的ArcMap和Python 2.7。
最初的错误消息,正如您所发现的,正是告诉您最初不起作用的内容。由于您没有将expression_type
传递给Calculate Field,并且您使用的是默认为VB
的ArcMap的某个版本,因此该函数将您的表达式解释为VB代码并出错,因为";CalculateField工具不能将VB表达式用于服务">
查看较新的代码,我不确定您为什么要编码field_type
。尽管我测试了它并且它有效,但对于查看代码的人来说,这是不必要的,也是令人困惑的。
除非您提供一些AttArt_Ken字段所包含内容的示例,否则人们无法真正对您看到的输出进行评论。