ArcPyを使用してフォルダー内の複数のジオデータベースのフィーチャクラスをリストしますか?


11

多数のジオデータベースを含むフォルダーがあります。ジオデータベース内にはフィーチャクラスがあります。Pythonスクリプトを使用して、これらのジオデータベースのフィーチャクラスのリストを取得したいと思います。これまでのところ、ジオデータベースのリストを取得しました。ジオデータベース内のフィーチャクラスのリストに関する提案はありますか?

スクリプトの印刷アイテムの行は、次の結果をもたらします。

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

いいえ、フィーチャデータセットはありません。
パティジュラ

回答:


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を使用できることを知りませんでした。ありがとうございました!
パティジュラ

1
@PattyJulaパティを歓迎します。また、一般的に「アイテム」のような一般的な単語は避けるとよいでしょう。何にでも適用でき、大きなスクリプトでは混乱を招くからです。単数形->複数形の区別を覚えておくのは簡単です-ただし、末尾のsを監視するために自分で訓練する必要があります。後者を支援するために略語を使用します。たとえば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がフルパスを返すので使用してください。;-)
マットウィルキー

まったくその通りです、マット。今後の参考のために例を更新します。また、次のフィーチャデータセットに移動する前にワークスペースを親GDBにリセットする行を最後に忘れました(この場合は必要ありませんが)。
ジェイソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.