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

नहीं, कोई विशेषता डेटासेट नहीं है।
पैटी जुला

जवाबों:


14

सामग्री को सूचीबद्ध करने से पहले आप जिस ट्रिक को याद कर रहे हैं वह प्रत्येक gdb को सक्रिय कार्यक्षेत्र बना रहा है:

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

यह भी ध्यान दें कि यह फीचर डेटासेट के अंदर एक फीचर क्लासेस को मिस करेगा, फाइल जियोडैटबेस में सभी फीचर क्लासेस को सूचीबद्ध करते हुए देखें , जिसमें फीचर डेटासेट भी शामिल है? उस को हल करने के लिए।

अधिक आम तौर पर, यदि आप उपयोग rकरते हैं तो आपको सब कुछ डबल करने की आवश्यकता नहीं है (विंडोज़ एक्सप्लोरर एड्रेस बार से आसान कॉपी और पेस्ट के लिए)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
टिप्पणियों के लिए +1 और एफडी को एकीकृत करना। मैं व्यक्तिगत रूप से 'अस्थायी' को एक चर नाम के रूप में उपयोग नहीं करूंगा क्योंकि यह "थ्रो दूर" और "डिलीट करने के लिए स्वतंत्र" का अर्थ है। चर अस्वीकार्य है, लेकिन यह सामग्री है, डेटाबेस, संभावना नहीं है। किसी भी घटना में, इस मामले में यह अनावश्यक है, बस के arcpy.env.workspace = gdbरूप में उपयोग करें ListWorkspaces पूर्ण पथ देता है। ;-)
मैट विल्की

तुम बिलकुल ठीक कह रहे हो, मैट। मैं भविष्य के संदर्भ के लिए उदाहरण को अपडेट करूंगा। इसके अलावा, मैं अंत में एक पंक्ति भूल गया जो अगले फीचर डेटासेट में जाने की कोशिश करने से पहले माता-पिता GDB को कार्यक्षेत्र को रीसेट करता है (भले ही यह इस मामले में आवश्यक नहीं है)।
जेसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.