繁体   English   中英

在循环中更改变量,Python

[英]Changing a variable during a loop, Python

因此,我所使用的是Python的arcpy for ArcGIS。

在循环之外,我有几个变量指向ArcMap MXD文档中的文本字段。

然后,我执行遍历缓冲区层每一行的循环,然后按位置选择在所述缓冲区内的任何点层。

然后,我想从这些点图层中获取值并填充之前声明的文本字段。

我的麻烦是我想对变量进行迭代,以便每次循环运行时它们都指向不同的文本字段。

我的代码:

指向我的MXD文档中的文本元素

HarbName1 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName1")[0]
HarbName2 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName2")[0]
HarbName3 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName3")[0]

第一个循环

for row in rows_dfA_Asset:
   whereClause = '"HARB_CODE" = ' + str(row.getValue("Harb_Code"))
   arcpy.MakeFeatureLayer_management(dfA_Buffer, output, whereClause, "", "")
   arcpy.SelectLayerByLocation_management(dfA_Layer, "WITHIN", output, "", "NEW_SELECTION")
   test = arcpy.SearchCursor(dfA_Layer, fields="Harb_Code; NAME; CAPACACITY; HIGH_BERTH; HarbHiPerc; AvgBerth; HarbAvgPer; CLSD_DET; CLSD_NUM_M; Tot_Num_As; Num_SCH_As; PROV; GOV_SCORE; MAN_SCORE")

第二个循环是问题

for field in test:
    count = count + 1
    print count

    HarbName(count) = str(field.getValue("NAME"))

因此归结为,我需要迭代变量名,该变量名将与指向文本元素的全局变量匹配。

如果有人想办法做到这一点,将不胜感激。 我知道我的代码不是最好的,我也不是程序员。

我认为此评论是正确的。

您要做的是重组以下内容:

HarbName1 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName1")[0]
HarbName2 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName2")[0]
HarbName3 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName3")[0]

如:

HarbName = { 1: arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName1")[0],
             2: arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName2")[0]
             3: arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName3")[0]
           }

那么最后一点将遵循以下原则:

for field in test:
    count = count + 1
    print count

    HarbName[count] = str(field.getValue("NAME"))

假设count是从零开始的,并且与上面定义的索引匹配

为此,您需要一个列表。 然后,您可以按计数访问每个文本元素。 您需要更改:

HarbName1 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName1")[0]
HarbName2 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName2")[0]
HarbName3 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName3")[0]

至:

HarbNames = []
HarbNames.append(arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName1")[0])
HarbNames.append(arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName2")[0])
HarbNames.append(arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName3")[0])

或者,更紧凑:

HarbNames = [arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName1")[0],
             arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName2")[0],
             arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "HarbourName3")[0]]

然后,稍后,在第二个循环中,执行HarbNames[count] (假设count从零开始):

for field in test:
    print count

    HarbNames[count] = str(field.getValue("NAME"))
    count = count + 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM