ArcPy를 사용하여 폴더의 여러 지오 데이터베이스에 피쳐 클래스를 나열 하시겠습니까?


11

수많은 지리 데이터베이스가있는 폴더가 있습니다. 지오 데이터베이스에는 피처 클래스가 있습니다. 파이썬 스크립트를 사용하여 이러한 지오 데이터베이스의 기능 클래스 목록을 얻고 싶습니다. 지오 데이터베이스를 나열하는 것까지만 얻었습니다. 지오 데이터베이스에 피쳐 클래스를 나열하는 것에 대한 제안이 있습니까?

스크립트의 인쇄 항목 행은 다음과 같은 결과를 제공합니다.

C:\output\data.gdb 
C:\output\otherdata.gdb
C:\output\somethingelse.gdb

위의 지오 데이터베이스에서 기능 클래스 목록을 생성하고 싶습니다. 아래는 지금까지 내 스크립트입니다.

    import arcpy, os, sys
    from arcpy import env

    arcpy.env.workspace = "D:\\output"
    inWorkspace = arcpy.env.workspace

    workspaces = arcpy.ListWorkspaces("*", "FileGDB")
    for item in workspaces:
         print item #This part gives me the print statements I shared above
    # fcList = arcpy.ListFeatureClasses() #I haven't figured this part out
    #I want to list the feature classes in the geodatabases

1
지오 데이터베이스 내에 기능 데이터 셋도 있습니까?
blah238

아니요, 기능 데이터 세트가 없습니다.
Patty Jula

답변:


14

누락 된 요령은 내용을 나열하기 전에 각 gdb를 활성 작업 공간으로 만드는 것입니다.

for item in workspaces:
    print item
    env.workspace = item
    fcs = arcpy.ListFeatureClasses()
    for fc in fcs:
        print '\t', fc

또한 이는 피쳐 데이터 세트 내에 피쳐 클래스가 누락 됩니다. 피쳐 데이터 세트를 포함하여 파일 지오 데이터베이스의 모든 피쳐 클래스 나열을 참조하십시오 . 그것을 해결하기 위해.

더 일반적으로 사용하는 경우 r모든 것을 백 슬래시 할 필요가 없습니다 (Windows 탐색기 주소 표시 줄 등에서 더 쉽게 복사하여 붙여 넣을 수 있습니다).r'D:\output'


1
멋지다! 나는 당신이 공유 한 것에서 다른 몇 가지 도구를 집어 들었습니다 .env.workspace를 사용할 수 있다는 것을 몰랐습니다. 감사합니다!
Patty Jula

1
@PattyJula 패티를 환영합니다. 또한 일반적으로 'item'과 같은 일반적인 단어를 피하는 것이 좋습니다. 이는 무엇이든 적용 할 수 있고 큰 스크립트에서는 혼동됩니다. 그것은 마음 singular-> 복수의 구별을 유지하는 것이 더 쉽습니다 - 당신이 후행을 감시하기 위해 자신을 훈련해야합니까 불구하고 . 나는 후자를 돕기 위해 약어를 사용합니다. 예를 들어 for wspace in workspaces:for fc in featureclasses:.
매트 윌키

8

이 스크립트는 기존 기능 데이터 세트를 처리합니다 (적어도 이론 상으로는 테스트하지 않았습니다). 그러나 기능 데이터 세트가있는 경우 기능을 나열하기 전에 작업 디렉토리를 해당 데이터 세트로 설정해야합니다.

import arcpy

dir = r'D:\output'
arcpy.env.workspace = dir

gdbList = arcpy.ListWorkspaces('*','FileGDB')

for gdb in gdbList:
    arcpy.env.workspace = gdb               #--change working directory to each GDB in list
    datasetList = arcpy.ListDatasets('*','Feature')     #--make a list of all (if any) feature datasets that exist in current GDB
    fcList = arcpy.ListFeatureClasses()         #--make a list of all feature in current GDB (root)
    for fc in fcList:
        print arcpy.env.workspace,fc            #--print directory,fc name
    for dataset in datasetList:
        arcpy.env.workspace = dataset   #--change working directory to each dataset (if any) in list
        fcList = arcpy.ListFeatureClasses()     #--make a list of all feature in current GDB (current dataset)
        for fc in fcList:
            print arcpy.env.workspace,fc        #--print directory,fc name
        arcpy.env.workspace = gdb

1
의견 및 통합 FD의 경우 +1 개인적으로 'temp'를 변수 이름으로 사용하지 않을 것입니다. 왜냐하면 "throw away"와 "free to delete"라는 의미 때문입니다. 변수는 버릴 수 있지만 데이터베이스는 내용이 아닐 수 있습니다. 어쨌든이 경우 불필요 arcpy.env.workspace = gdb합니다. ListWorkspaces가 전체 경로를 반환 할 때만 사용하십시오 . ;-)
matt wilkie

네 말이 맞아, 매트 나중에 참조 할 수 있도록 예제를 업데이트하겠습니다. 또한 다음 기능 데이터 세트로 이동하기 전에 작업 공간을 부모 GDB로 재설정하는 줄을 잊었습니다 (이 경우에는 필요하지 않더라도).
Jason
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.