[英]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.