使用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

不,没有要素数据集。
Patty Jula

Answers:


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不客气,Patty。同样,通常最好避免使用诸如“ item”之类的通用词,因为它可能适用于任何内容,并且在较大的脚本中会造成混淆。记住单数与复数的区别会更容易-尽管您确实需要训练自己以注意尾随s。我使用缩写来帮助后者。例如for wspace in workspaces:for fc in featureclasses:
马特·威尔基(Matt wilkie)2011年

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
+1用于评论和集成FD。我个人不会使用'temp'作为变量名,因为它具有“扔掉”和“可以自由删除”的含义。该变量是可丢弃的,但它的内容(数据库)可能不是。无论如何,在这种情况下都没有必要,只需将其arcpy.env.workspace = gdb用作ListWorkspaces返回完整路径即可。;-)
马特·威尔基(Matt wilkie)2011年

你完全正确,马特。我将更新示例以供将来参考。另外,在最后,我忘记了一行,在尝试转到下一个要素数据集之前,将工作空间重置为父GDB(即使在这种情况下不是必需的)。
杰森(Jason)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.