我无法将数据附加到列表中

时间:2016-05-26 17:50:41

标签: python arcpy cursors

我正在尝试将总区域追加到属性表中,它会在没有任何错误消息的情况下运行。我不确定我做错了什么:

import os
import arcpy
import math
folderpath = 'C:\Users\Michaelf\Desktop\GEOG M173'
arcpy.env.workspace = folderpath
arcpy.env.overwriteOutput = True
input_shp = folderpath + r'\lower48_county_2012_election.shp'
equal_shape = folderpath + r'\project_lower48.shp'

projection = arcpy.SpatialReference('USA Contiguous Albers Equal Area Conic USGS')
arcpy.Project_management(input_shp, equal_shape, projection)
print 'step 1'

arcpy.CopyFeatures_management (input_shp, equal_shape)
tot_area = []

print "step 2"
fields = [
    ("totarea", "FLOAT"),
]

for field in fields:
    arcpy.AddField_management(equal_shape, "totarea")
print "step 3"

with arcpy.da.SearchCursor(equal_shape, ("OID@", "SHAPE@AREA")) as cursor:
    for row in cursor:
    print("Feature {0} has an area of {1}".format(row[0], row[1]))
print "step 4"

a_cursor = arcpy.SearchCursor(equal_shape)
for area in a_cursor:
    tot_area.append(area.totarea,)
print "step 5"

更新: wnnmaw当我运行它运行的代码并打印一个功能/多边形区域的列表但是当我打开.shp文件时,新列就在那里,并且没有数据附加到列表中。 ZWiki当我打印列表时,它返回一个巨大的0列表,就像属性表中列出的那样。在代码中我将它归类为FLOAT但是在arcmap属性表属性中它仍然将其识别为LONG,这可能是问题,因为答案是小数?

1 个答案:

答案 0 :(得分:0)

首先:当您添加该字段列表时,您遇到了数据类型问题。

此代码只是添加一个名为totarea的字段,并且不会对fields列表中的数据执行任何操作。

for field in fields:
    arcpy.AddField_management(equal_shape, "totarea")

相反:

fields = [("totarea", "FLOAT")]
for field in fields:
    arcpy.AddField_management(equal_shape, field[0], field[1])

其次:Use an UpdateCursor。搜索游标无法更改表格的数据。

如果你想坚持使用那个区域列表:

tot_area = []
with arcpy.da.SearchCursor(equal_shape, ("OID@", "SHAPE@AREA")) as cursor:
    for row in cursor:
        print("Feature {0} has an area of {1}".format(row[0], row[1]))
        tot_area.append(row[1])
print "step 4"

sum_area = sum(tot_area)
with arcpy.da.UpdateCursor(equal_shape, ["TOTAREA"]) as cursor:
    for row in cursor:
        row[0] = sum_area
        cursor.updateRow(row)
print "step 5"

或者只是在浏览SearchCursor时总结:

tot_area = 0
with arcpy.da.SearchCursor(equal_shape, ("OID@", "SHAPE@AREA")) as cursor:
    for row in cursor:
        print("Feature {0} has an area of {1}".format(row[0], row[1]))
        tot_area += row[1]
print "step 4"

with arcpy.da.UpdateCursor(equal_shape, ["TOTAREA"]) as cursor:
    for row in cursor:
        row[0] = tot_area
        cursor.updateRow(row)
print "step 5"