J'ai fini par utiliser la réponse de gotchula , mais sans rendement car je réutilise généralement les poignées FC créées et les rendements sont utilisés une fois puis jetés, il est plus facile pour moi de lire et de comprendre ce qui fcs.append()
se passe que fcs = yield(...)
.
def listFcsInGDB(gdb):
''' list all Feature Classes in a geodatabase, including inside Feature Datasets '''
arcpy.env.workspace = gdb
print 'Processing ', arcpy.env.workspace
fcs = []
for fds in arcpy.ListDatasets('','feature') + ['']:
for fc in arcpy.ListFeatureClasses('','',fds):
#yield os.path.join(fds, fc)
fcs.append(os.path.join(fds, fc))
return fcs
gdb = sys.argv [1]
fcs = listFcsInGDB(gdb)
for fc in fcs:
print fc
Résultats:
d:\> python list-all-fc.py r:\v5\YT_Canvec.gdb
Processing r:\v5\YT_Canvec.gdb
Buildings_and_structures\BS_2530009_0
Buildings_and_structures\BS_2380009_2
Buildings_and_structures\Tower
Buildings_and_structures\Underground_reservoir
...
C'est maintenant dans un module que j'appelle arcplus *. Placez avec votre autre code ou PYTHONPATH puis:
import arcplus
fcs = arcplus.listAllFeatureClasses('d:\default.gdb')
for fc in fcs:
print "magic happens with: ", fc
Arcplus ajoute également un filtrage générique; pour traiter uniquement les classes d'entités commençant par "HD_" dans les jeux de données d'entité contenant "Hydro"
fcs = arcplus.listAllFeatureClasses(gdb, fd_filter='*Hydro*', fc_filter='HD_*')
. * maintenant sur Github, mis à niveau pour 10.x. Pour arcgis 9.3, voir ici .
arcpy.da.Walk
) est Comment faire un inventaire SIG?