รายการคลาสคุณลักษณะในฐานข้อมูล Geod หลายรายการในโฟลเดอร์ที่ใช้ 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

คำตอบ:


14

เคล็ดลับที่คุณขาดหายไปคือการทำให้แต่ละพื้นที่ทำงานใช้งานได้ก่อนที่จะแสดงรายการเนื้อหา:

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

นอกจากนี้โปรดทราบว่านี่จะพลาดคลาสคุณลักษณะภายในชุดข้อมูลคุณลักษณะดูรายการคลาสคุณลักษณะทั้งหมดในไฟล์ Geodatabase รวมถึงภายในชุดข้อมูลคุณสมบัติ เพื่อแก้ปัญหานั้น

โดยทั่วไปหากคุณใช้rคุณไม่จำเป็นต้องใช้แบ็กสแลชเป็นสองเท่า (ทำให้การคัดลอกและวางง่ายขึ้นจากแถบที่อยู่ของ windows explorer และอื่น ๆ ): เช่นr'D:\output'


1
เจ๋งที่ใช้งานได้! ฉันเลือกเครื่องมืออื่น ๆ จากสิ่งที่คุณแบ่งปันด้วย - ไม่รู้ว่าฉันสามารถใช้ env.workspace แบบนั้นได้ ขอบคุณ!
Patty Jula

1
@PattyJula คุณยินดีต้อนรับ Patty นอกจากนี้โดยทั่วไปควรหลีกเลี่ยงคำทั่วไปเช่น 'รายการ' เนื่องจากสามารถนำไปใช้กับอะไรก็ได้และในสคริปต์ที่ใหญ่ขึ้นจะทำให้สับสน มันง่ายที่จะเก็บไว้ในใจ singular-> พหูพจน์แตกต่าง - แม้ว่าคุณจะต้องฝึกตัวเองให้ดูต่อท้าย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 สำหรับความคิดเห็นและการรวม FDs ฉันเองจะไม่ใช้ 'temp' เป็นชื่อตัวแปรเนื่องจากความหมายของคำว่า "ทิ้ง" และ "อิสระในการลบ" ตัวแปรสามารถยกเลิกได้ แต่เนื้อหาเนื้อหาฐานข้อมูลไม่น่าจะเป็นไปได้ ในกรณีใด ๆ ในกรณีนี้มันไม่จำเป็นเพียงใช้arcpy.env.workspace = gdbเป็น ListWorkspaces ส่งคืนพา ธ แบบเต็ม ;-)
matt wilkie

คุณพูดถูกแมตต์ ฉันจะอัปเดตตัวอย่างสำหรับการอ้างอิงในอนาคต นอกจากนี้ฉันลืมบรรทัดท้ายที่รีเซ็ตเวิร์กสเปซเป็น GDB หลักก่อนที่จะลองไปที่ชุดข้อมูลคุณลักษณะถัดไป (แม้ว่าจะไม่จำเป็นในกรณีนี้)
เจสัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.