在Arcgis python(Arcpy)中选择具有指定名称的要素类

在Arcgis python(Arcpy)中选择具有指定名称的要素类,python,arcgis,arcpy,Python,Arcgis,Arcpy,我正在使用arcpy,我想提取一个名为“building”的特定要素类,该要素类嵌套在我的工作区内的多个地理数据库中 代码如下: import arcpy import os workspace = "C:/Wiley/P1/gis" search = "Building" outdir = "C:/Wiley/P1/gis/HK80.gdb" fc = [] walk = arcpy.da.Walk(workspace, datatype="FeatureClass", type="Pol

我正在使用arcpy,我想提取一个名为“building”的特定要素类,该要素类嵌套在我的工作区内的多个地理数据库中

代码如下:

import arcpy
import os

workspace = "C:/Wiley/P1/gis"
search = "Building"
outdir = "C:/Wiley/P1/gis/HK80.gdb"
fc = []

walk = arcpy.da.Walk(workspace, datatype="FeatureClass", type="Polygon")

for dirpath, dirnames, filenames in walk:
          for filename in filenames:
             if search == filename:
                     fc.append(os.path.join(dirpath, filename))
if fc:
     output = os.path.join(outdir, os.path.basename(search) + "_merge")
     arcpy.Merge_management(fc, output)
这段代码是成功的

但地理数据库中除了“Building”之外还有许多其他功能类,因此我稍微扩展了代码,并尝试通过所有这些功能类循环merge命令:

    import arcpy
import os

#--------------------------
#example list workspace
arcpy.env.workspace = "C:/Wiley/P1/gis/HKU_Job69.gdb"

#Generate exmaple list dataset
datasets = arcpy.ListDatasets(feature_type='All')
datasets = [''] + datasets if datasets is not None else []
fc_list = []

#--------------------------

#where all the gdb is nested
workspace = "C:/Wiley/P1/gis"

#define output
outdir = "C:/Wiley/P1/gis/HK80.gdb"

#List of Feature classes
fc = []

#define walk for looping
walk = arcpy.da.Walk(workspace, datatype="FeatureClass", type="Any")

for ds in datasets:
     for fc_example in arcpy.ListFeatureClasses(feature_dataset=ds):
        fc_list.append(fc_example)


for f in fc_list: #Loop through the list   
   for dirpath, dirnames, filenames in walk:        
        for filename in filenames:
           if f == filename:
                     fc.append(os.path.join(dirpath, filename))
   if fc:
        output = os.path.join(outdir, os.path.basename(search) + "_merge")
        arcpy.Merge_management(fc, output)

这就是我撞到墙的地方。这个代码有什么问题吗?我是Python新手,所以对于训练有素的人来说,你们可以立即发现逻辑中的错误。f变量似乎根本没有循环。

尝试整理缩进-例如,不需要缩进导入arcpy的第一行。此外,在您的第一个脚本(正在运行的脚本)中,arcpy.Merge_管理工具不在循环中。在第二个(不工作)脚本中,它位于fc_list循环中,如果我正确理解了脚本的逻辑,则不需要这样做

您还可以尝试在fc_list循环中添加一条print语句,以查看它是否正在运行,如下所示:

for f in fc_list: #Loop through the list   
    for dirpath, dirnames, filenames in walk:        
        for filename in filenames:
            print filename
            if f == filename:
                fc.append(os.path.join(dirpath, filename))
                print 'appended'
            else:
                print 'nope!'
    print 'done with walk'

if fc:
    output = os.path.join(outdir, os.path.basename(search) + "_merge")
    arcpy.Merge_management(fc, output)
交叉冒充