2014-09-11 5 views
2

arcpy.ListFeatureClasses()를 동일한 스크립트 내의 여러 작업 공간에 사용하려고합니다. 다른 예를 들어 스크립트를 통해 보면서, 나는 단순히 변수에 작업 공간을 할당 한 다음 arcpy.ListFeatureClasses() 예를 들어arcpy.ListFeatureClasses() 다중 작업 공간

내에서 그 변수를 사용할 수 있다고 생각 :

workspace = "C:\\location\\" 
fcs = arcpy.ListFeatureClasses(workspace) 
for fc in fcs: 
    print fc 

을하지만,이 오류가 발생합니다

TypeError: 'NoneType' object is not iterable 

내가 왔 arcpy.ListFeatureClasses() 내가 좋아하는, 기본 작업 공간 내에서 기능 클래스에만 관심이있을 때 작동합니다 :

arcpy.env.workspace = "C:\\location\\" 
fcs = arcpy.ListFeatureClasses() 

하지만 스크립트의 각 단계마다 다른 폴더를 조사하는 데 관심이 있습니다. 각 단계마다 기본 작업 영역을 재설정하지 않으려합니다.

왜 다른 사람의 스크립트 (내 GIS 프로그래밍 교수의 스크립트 포함)에 사용 된 첫 번째 예제를 보았을 때 그 인스턴스에서 작동하는 것처럼 보였지만 오류가 발생합니다.

제공되는 도움이나 조언에 감사드립니다.

답변

3

첫 번째 예는 확실히 작동하지 않습니다. arcpy.ListFeatureClasses()은 3 개의 선택적 인수를 취하고 작업 영역은 그 중 일부가 아니며 미리 정의해야합니다. 정확한 구문은 함수의 Help page을 참조하십시오.

현재 작업 영역을 재설정하는 것은 그렇게 중요하지 않습니다. 작업하는 작업 공간의 유형 (폴더, 지오 데이터베이스, SDE, 다양한 ...) 및 구조화 방법 (모두 같은 위치에 있습니까? 특정 폴더/데이터베이스 목록이 있습니까?) 해당 목록을 나열하고 그 기능 클래스를 나열 작업 영역 반복 :

# 1. List workspaces 

listWS = [r"C:\DATA", r"D:\PROJECT\geodatabase.gdb", r"D:\whatever.mdb"] 
# use this if the workspaces are in various locations 

# or: 

arcpy.env.workspace = r"C:\DATA" 
listWS = arcpy.ListWorkspaces() 
# use this if the workspaces are in the same location 

# 2. Iterate over the workspaces and list their feature classes 

for ws is listWS: 
arcpy.env.workspace = ws 
listFC = arcpy.ListFeatureClasses() 
for fc in listFC: 
    # do something 

특정 작업 공간의 유형 또는 와일드 카드를 사용하여 목록을 제한하는 방법을 볼 수 arcpy.ListWorkspaces()Help page를 참조하십시오.