使用添加字段和字段计算器进行Python for ArcGIS循环

时间:2014-10-07 00:49:11

标签: python for-loop arcgis

我将在这里给出一个简短的背景。我最近收到了大量数据,这些数据都是从纸质地图中数字化的。每个地图都保存为包含许多记录(主要是多边形)的单个文件。我的目标是将所有这些文件合并到一个shapefile或地理数据库中,这是一项非常简单的任务。但是,除了空间信息之外,文件中的记录没有任何区别信息,因此我想添加一个字段并用原始文件名填充它以跟踪其出处。例如,在文件“505_dmg.shp”中,我希望每个记录在属性表中标有“map_name”的列中具有“505_dmg”id。我试图使用Python自动化这个,感觉我非常接近。这是我正在使用的代码:

# Import system module
import arcpy
from arcpy import env
from arcpy.sa import *

# Set overwrite on/off
arcpy.env.overwriteOutput = "TRUE"

# Define workspace
mywspace = "K:/Research/DATA/ADS_data/Historic/R2_ADS_Historical_Maps/Digitized Data/Arapahoe/test"
print mywspace

# Set the workspace for the ListFeatureClass function
arcpy.env.workspace = mywspace

try:
    for shp in arcpy.ListFeatureClasses("","POLYGON",""):
        print shp
        map_name = shp[0:-4]
        print map_name
        arcpy.AddField_management(shp, "map_name", "TEXT","","","20")
        arcpy.CalculateField_management(shp, "map_name","map_name", "PYTHON")
except:
     print "Fubar, It's not working"
     print arcpy.GetMessages()
else:
     print "You're a genius Aaron"

我通过运行此脚本获得的输出:

>>> 

K:/Research/DATA/ADS_data/Historic/R2_ADS_Historical_Maps/Digitized Data/Arapahoe/test
505_dmg.shp
505_dmg
506_dmg.shp
506_dmg
You're a genius Aaron

看似成功,对吗?好吧,它已经......几乎:为两个文件添加并填充了一个字段,它非常适合505_dmg.shp文件。问题是,506_dmg.shp在“map_name”列中也标记为“505_dmg”。虽然循环似乎部分工作,但map_name变量似乎没有更新。任何想法或建议都非常感激。

谢谢,

亚伦

1 个答案:

答案 0 :(得分:0)

我收到了ESRI讨论区的解决方案: https://geonet.esri.com/thread/114520

基本上,计算字段功能中的一个小编辑就可以了。以下是有效的新代码:

arcpy.CalculateField_management(shp, "map_name","\"" + map_name + "\"", "PYTHON")