【发布时间】:2019-04-03 21:31:59
【问题描述】:
我正在尝试清理我的脚本,这样我就不必每次想使用它时都更改变量。
我有美国每个州(加上华盛顿和波多黎各)的 arcgis 表。我想遍历文件夹中的这些表,一次将每个表连接到 shapefile,将连接的要素复制到不同地理数据库中的新要素类,以相应的州名称命名该要素类,然后删除连接并继续到下一个状态。
当谈到 python 时,我认为自己是一个新手。多年来,我一直在努力自学,但一直没有机会参加深入的课程,而且与我一起工作的任何人都不太了解这一点。我知道有更有效的脚本编写方法,例如循环、函数和条件语句,但我不知道如何正确设置它们。
所以我创建了一个脚本来完成我今天需要完成的工作,但我想让脚本更加动态。我不想更改每个表名或新的要素类名称。我试图查找如何为部分代码创建自定义函数,但随后也有一个循环,因此它知道遍历文件夹中的每个表。我不确定是否需要先有循环,然后是函数,或者在函数内部有循环。然后我不知道如何为输出要素类获取正确的名称,我知道有一种方法可以使用 %s 引用动态变量,但不知道如何在此处合并它。
layer = arcpy.GetParameterAsText(0)
inField = "GEOID"
jTable = r'k:\geospatial\data\census\national\census_fact_finder_data\census_tract_year_built\aa_by_state\xls_pcts\tables'
jField = "GEOID"
outFC = r'K:\GEOSPATIAL\DATA\Census\National\Census_Fact_Finder_Data\Shapefiles\CFF_Census_Tracts\PCTs\FCC_CT_YB_PCT.gdb'
arcpy.AddMessage("Processing Arizona...")
#join table to census tract layer
arcpy.AddMessage("Joining Arizona table to Census Tracts...")
tract_join = arcpy.AddJoin_management(layer, inField,jTable + "\\az_pcts", jField, "KEEP_COMMON")
#Copy joined features to new feature class in geodatabase
arcpy.AddMessage("Exporting joined features to FCC_CT_YB_PCT geodatabase...")
arcpy.CopyFeatures_management(tract_join, outFC + "\Arizona_PCT")
#remove all joins
arcpy.AddMessage("Removing joins to process next table...")
arcpy.RemoveJoin_management(layer)
arcpy.AddMessage("Arizona Complete")
因此,在上面的示例中,它将 Arizona 表 (az_pcts) 连接到人口普查区域图层 (layer = arcpy.GetParameterAsText(0)),将连接的要素复制到新数据库并将其命名为 Arizona_PCT,然后删除连接并继续下一张桌子。我为每个状态表重复了相同的结构,并将所有路径结尾更改为我想要的。如果有人有任何建议,甚至是碎片,将不胜感激。
【问题讨论】:
-
您可以使用
os.listdir()或glob.glob()获取给定目录中的文件列表,因此使用其中一个可以读取所有表。目前尚不清楚如何以这种方式获取区域的名称(例如Arizona_PCT),除非它可以从文件名中提取。我不熟悉arcpy,但另一种可能性是使用它提供的一些方法来支持提取正在处理的表文件...
标签: python python-2.7 arcpy