我将在这里给出一个简短的背景。我最近收到了大量数据,这些数据都是从纸质地图中数字化的。每个地图都保存为包含许多记录(主要是多边形)的单个文件。我的目标是将所有这些文件合并到一个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变量似乎没有更新。任何想法或建议都非常感激。
谢谢,
亚伦
答案 0 :(得分:0)
我收到了ESRI讨论区的解决方案: https://geonet.esri.com/thread/114520
基本上,计算字段功能中的一个小编辑就可以了。以下是有效的新代码:
arcpy.CalculateField_management(shp, "map_name","\"" + map_name + "\"", "PYTHON")