ArcPy kullanarak klasördeki birden çok coğrafi veritabanındaki özellik sınıflarını listeleme?


11

İçinde çok sayıda coğrafi veri tabanına sahip bir klasör var. Coğrafi veritabanları içinde özellik sınıfları vardır. Bir Python betiği kullanarak bu coğrafi veritabanlarındaki özellik sınıflarının bir listesini almak istiyorum. Ben sadece coğrafi veri tabanlarını listelemek kadar aldım. Herkes coğrafi veri tabanlarında özellik sınıflarını listeleme konusunda bir öneri var mı?

Komut dosyamdaki yazdır öğe satırı bana aşağıdaki sonuçları veriyor:

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

Yukarıdaki coğrafi veri tabanlarında özellik sınıflarının bir listesini oluşturmak istiyorum. Aşağıda benim senaryom.

    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
Ayrıca coğrafi veri tabanlarında özellik veri kümeleri var mı?
blah238

Hayır, özellik veri kümesi yok.
Patty Jula

Yanıtlar:


14

Eksik olan numara, içeriği listelemeden önce her gdb'yi aktif çalışma alanı yapmaktır:

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

Ayrıca bunun özellik veri kümeleri içindeki bir özellik sınıflarını kaçıracağını unutmayın, bkz. Özellik veri kümeleri dahil Dosya Coğrafi Veritabanındaki tüm özellik sınıflarını listeleme? bunu çözmek için.

Daha genel olarak, kullanıyorsanız, rher şeyi iki kez ters eğmeniz gerekmez (Windows Gezgini adres çubuğundan vb. Kopyalamayı ve yapıştırmayı kolaylaştırır):r'D:\output'


1
Harika, işe yaradı! Paylaştığınız şeyden birkaç araç daha aldım - env.workspace'i bu şekilde kullanabileceğimi bilmiyordum. Teşekkür ederim!
Patty Jula

1
@PattyJula Hoş geldiniz Patty. Ayrıca, herhangi bir şey için geçerli olabileceğinden ve daha büyük komut dosyalarında kafa karıştırıcı olduğundan, 'öğe' gibi genel kelimeleri kullanmaktan genellikle daha iyidir. Akla singular-> çoğul ayrım içinde tutmak daha kolay - sen sondaki izlemek için kendinizi eğitin gerek yapmak olsa s . İkincisine yardımcı olmak için kısaltmalar kullanıyorum. Örneğin for wspace in workspaces:ve for fc in featureclasses:.
matt wilkie

8

Bu komut dosyası, mevcut özellik özellik kümeleriyle ilgilenecektir (en azından teoride - test etmedim). Yine de aynı genel fikir, özellik veri kümeleri varsa, özellikleri listelemeden önce çalışma dizininizi bu veri kümesine ayarlamanız gerekir.

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
Yorumlar ve FD'leri entegre etmek için +1. Ben şahsen değişken bir isim olarak 'temp' kullanmak olmaz çünkü "atmak" ve "silmek için ücretsiz" anlamlarını. Değişken çıkarılabilir, ancak içeriği, veritabanları büyük olasılıkla değildir. Her durumda, bu durumda gereksizdir, sadece arcpy.env.workspace = gdbListWorkspaces tam yol döndürdüğü için kullanın . ;-)
matt wilkie

Tamamen haklısın, Matt. Örneği ileride başvurmak üzere güncelleyeceğim. Ayrıca, bir sonraki özellik veri kümesine gitmeden önce çalışma alanını üst GDB'ye sıfırlayan bir satırı unuttum (bu durumda gerekli olmasa bile).
Jason
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.