我正在使用arcpy来获取形状文件的所有折线. SearchCursor返回一个游标,以便我可以遍历shape文件的所有功能.问题是我想保存光标返回的所有对象供以后使用.
import arcpy
from arcpy import env
env.workspace = r"C:\GIS Data\GIS data"
desc = arcpy.Describe("River.shp")
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor("River.shp")
featureList = ()
for row in rows:
feat = row.getValue(shapefieldname)
featureList = featureList + (feat, )
print "%i %i" % (featureList[-1].firstPoint.X, featureList[-1].firstPoint.Y)
print "%i %i" % (featureList[-1].lastPoint.X, featureList[-1].lastPoint.Y)
print
print "---------------------------------------------------------------"
for feat in featureList:
print "%i %i" % (feat.firstPoint.X, feat.firstPoint.Y)
print "%i %i" % (feat.lastPoint.X, feat.lastPoint.Y)
print
元组应该包含游标返回的所有对象.但是它只有最后一个元素重复元组大小的次数.
3610930 2135882 3611593 2134453
3611806 2134981 3611593 2134453
3614160 2136164 3617432 2131734
3611593 2134453 3617432 2131734
3617432 2131734 3620568 2127591
3620568 2127591 3620785 2127423
3617980 2126657 3620568 2127591
3616768 2129454 3617948 2126649
3617948 2126649 3617980 2126657
3615102 2128889 3617587 2126510
3617587 2126510 3617948 2126649
3617624 2126416 3617980 2126657
3613129 2128176 3615155 2125617
3615155 2125617 3617587 2126510
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
3615086 2125515 3615155 2125617
首先,我尝试使用列表进行此操作.当我使用’append()’方法时,也为列表找到了相同的输出.由于元组是不可变的数据结构,因此如何覆盖元组的所有先前元素.尽管这段代码是为arcpy编写的,但是我想问题并不是arcgis特有的.
解决方法:
这表明row.getValue()不断返回对同一对象的引用,并不断进行更新.
若要进行验证,请尝试在第一个循环中打印id(feat),id(feat.firstPoint)和id(feat.lastPoint),并查看两次迭代之间是否有任何ID保持相同.如果其中有一个,那就是您的问题.
As tuple is immutable data structure, how can + overwrites all the previous elements of tuple.
没有.在不创建新元组的情况下无法添加或删除元素的意义上,元组是不可变的.您也不能更改元组元素的值.但是,如果该元素是对可变对象的引用,则可以随意修改对象本身.我怀疑这是在这里发生的事情:您对同一个对象有多个引用;当您修改一个时,它们似乎都发生了变化.