如何将列字段转换为列表

时间:2011-07-27 16:00:21

标签: python arcgis

我正在尝试使用ArcGIS 9.3进行简单的字段计算:

New field = Old field - Old field(first value)
在使用python代码的Calculate Field中的

应该是

表达式:!Old field! - first

代码阻止:list= [AngOriz] first = list[0]

错误是

ERROR 000539: Runtime error : name 'AngOriz' is not defined Failed to execute (Calculate Field).

如何将列字段转换为列表?


我试过这种方式

表达式:

makeCalc( !AngOriz!, !AngOriz!)

代码块:

def makeCalc(x, y):
    first_value = y.split(' , ')[0] 
    return x-first_value

但我仍然得到:

  

错误000539:运行表达式时出错:makeCalc(43.01841,43.01841):'float'对象没有属性'split'执行失败(Calculate Field)。

我需要计算列值和同一列的第一个值之间的差值(值是浮点值)。 目的是计算滑坡上不同测量点的位移。

2 个答案:

答案 0 :(得分:0)

我没有全面了解,Old field(第一个值)是什么意思?旧字段是一个文本字段,上面有多个值,用逗号或类似的东西分隔?如果是这样,你之前怎么使用Old field?

但是无论如何,你得到的错误是因为在代码块中你还没有定义AngOriz ...你想要做的最好的方法是在函数内部,它获得必要的值使用as参数,并将值返回到字段,这是一个示例:

表达式字段上的

my_function(!Old field!, !some_other_field!)

并在代码块上:

def my_function(old_field, other_field):
    # supposing other_field is a list of int-values in a string = "1, 23, 5"
    first_value = int(other_field.split(', ')[0])
    return old_field - first_value

答案 1 :(得分:0)

很抱歉花了这么长时间才回答。有一个忙碌的一周:-)好吧,我认为你的意思是字符串字段,而不是浮动字段,所以忘记分裂的东西。我将离开上面的答案,因为它可能有助于其他人寻找如何将(字符串)字段转换为列表并使用其值进行字段计算。

如果我现在得到这个,你的意思是AngOriz第一行的价值,对吧?因此,如果此值没有改变,那么只需在函数上使用“硬编码”,如下所示:

表达式字段上的

my_function(!AngOriz!)

并在代码块上:

def my_function(old_field):        
    return old_field - 34.123  # just type the value of the first row here

如果您不想“硬编码”第一行的值,那么您必须以某种方式检索它,但我不确定您如何在字段计算器上执行此操作。可能你必须以完全不同的方式解决这个问题。使用arcpy左右的脚本。

更新: 在字段计算器中也可以使用全局变量 - 这意味着在函数调用之间持久存在的变量。因为函数由字段计算器为每一行调用,并且通常函数内的所有变量在调用之间“死”,所以不可能“记住”局部变量上的某些东西。但是您可以使用全局变量来保存第一行的值,并在其他后续调用中使用它。我没有尝试过,但也许这样的事情会起作用:

firstValue = None
def my_function(old_field):
    global firstValue
    if firstValue == None:  # this will be true only if this is the first call/row ...
        firstValue = old_field  # ... save the value on the global variable
    return old_field - firstValue