2017-09-08 20 views
-1

arcpy를 사용 중이고 내 작업 공간 내의 여러 geodatabase에 중첩 된 "building"이라는 특정 피쳐 클래스를 추출하려고합니다.Arcgis python (Arcpy)에서 지정된 이름의 피쳐 클래스 선택

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) 

이 코드가 성공적으로 완료 : 여기

는 코드입니다.

하지만 코드를 조금 확장하고 모든 기능 클래스를 통해 루프 병합 명령을 시도 그래서 다른 많은 featureclass는 "건물"에서 떨어져 지오 데이터베이스에있다 : 나는 명중 곳

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) 

입니다 벽. 이 코드에 문제가 있습니까? 나는 파이썬에 익숙하지 않으므로 숙련 된 전문가라면 로직에서 오류를 즉시 발견 할 수 있습니다. f 변수는 전혀 루프하지 않는 것 같습니다.

+0

https://gis.stackexchange.com/q/254711으로 크로스 제기/115 – PolyGeo

답변

0

들여 쓰기를 시도하십시오. 예를 들어, arcpy를 가져올 첫 줄을 들여 쓸 필요가 없습니다. 또한 첫 번째 스크립트 (작동중인 스크립트)에서 arcpy.Merge_management 도구가 루프에 있지 않습니다. 두 번째 (작동하지 않는) 스크립트에서는 fc_list 루프에 있습니다. 스크립트의 논리를 올바르게 이해하면 필요하지 않습니다.

또한 전혀 실행중인 있는지 확인하기 위해 fc_list 루프 내에서 인쇄 문을 추가 시도 할 수 있습니다 -이 같은 :

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)