Arcpy脚本循环-如何循环浏览文件夹中的表并在每个表上执行arcpy连接功能?

时间:2019-04-03 21:31:59

标签: python python-2.7 arcpy

我正在尝试清理脚本,以免每次使用脚本时都不必更改变量。

我有每个美国州(加上DC和波多黎各)的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 ,然后删除该联接并继续到下一个表。我为每个状态表重复了同样的结构,并将所有路径结尾更改为我想要的样子。如果有人有任何建议,甚至是一些建议,将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,欢迎使用Stack Overflow。 您可以使用ModelBuilder完成所有这些操作。看到: What is model builder and quick tutorial

但是我不明白您在文件夹中定位的是哪种表?通常,您需要在文件地理数据库,个人地理数据库或RDBMS表中指定文件夹,而不是在文件夹中。但是我跳过了这个问题,并在上​​面为您提供了示例代码。

无论如何,我为您准备了一些代码。您可以按照以下步骤操作:

@override
Widget build(BuildContext context) {
  return SafeArea(
    child: Scaffold(
      body: Stack(
        children: <Widget>[
          Positioned(left: 0, child: _animation()),
          Positioned(top: 100, child: Text("This is your text",)),
        ],
      ),
    ),
  );
}