Mehr

Auflisten von Datenquellen mit arcpy: ListLayers sehr langsam

Auflisten von Datenquellen mit arcpy: ListLayers sehr langsam


Ich versuche, eine Liste aller Datenquellen in einem mit mxds gefüllten Verzeichnis zu erstellen. Also habe ich diesen Code unten eingefügt. Aus irgendeinem Grund kann es beim Auflisten von Layern bis zu 50 Minuten dauern, obwohl der mxd nur etwa 10 oder 15 Layer hat. Ist dies bei der listlayers-Methode üblich?

with open('data.csv', 'wb') as csvfile: fieldnames = ['File_Path', 'File_Size(MB)', 'Last_Edit', 'MXD_Version', 'Author', 'PageSize',  'XMAX' , 'XMIN', 'YMAX', 'YMIN', 'DATASOURCE'] #alle Header-Felder write = csv.DictWriter(csvfile, fieldnames = fieldnames) Writer.writeheader() für mapDocument in findFiles(r"W:/GIS (no purge)", '*.mxd'): print mapDocument st = os.stat(mapDocument) print "Using ArcPY Mods… " mxd = arcpy.mapping.MapDocument(mapDocument) #using arcpy um weitere Informationen zu sammeln print "Reading Map Document… "writer.writerow({'File_Path' : str(mapDocument), 'File_Size(MB)' : str(((st[ST_SIZE])/1024.0)/1024.0),  'Last_Edit' : str(time .ctime(st[ST_MTIME])),  'MXD_Version' : getMXDVersion(mapDocument)}) print "Layer suchen und schreiben…" für Layer in arcpy.mapping.ListLayers(mxd): print "boop" if layer.supports( "DATASOURCE"): write.writerow({'DATASOURCE' : layer.dataSource}) else: break del mxd

Mein Problem mit dem obigen Code ist also, wenn ich ihn ausführe. Es wird ewig dauern, bis zum '"boop" drucken'aber wenn es dort angekommen ist, läuft es perfekt. Es scheint aufgehängt zu werdenarcpy.mapping.ListLayers(mxd)für eine sehr lange Zeit.

Manchmal ist es großartig, dauert nur ein paar Sekunden, manchmal 8 Minuten. Das ist überschaubar, aber wenn ich meinen Code die ganze Nacht laufen lasse und einige von ihnen 50 Minuten brauchen oder er einfach abstürzt, ist das das Problem (er stürzte aufgrund eines Speicherfehlers ab). Diese mxds haben auch nicht so viele Ebenen.

Normalerweise gibt es nur einen Datenrahmen, der höchstens 20 Ebenen enthält. Ich kann diese mxds selbst öffnen und es dauert höchstens ein paar Minuten, wenn ich es tue.

Nach weiteren Tests scheint es auch nicht mit der Anzahl der Schichten zusammenzuhängen. Es gab ein paar Mxds mit etwa 30 Schichten, die in wenigen Sekunden fertig waren, und dann noch einige, die 4 Stunden dauerten (es hatte 44 Schichten) und einige mit 30 Schichten und 50 Minuten. Wenn ich nur sagen könnte, warum es so lange dauert, wäre es super.


Vergleichen Sie zuerst Ihr Skript mit einem Verzeichnis mit einem mxd und einem Layer, um sicherzustellen, dass das Problem nicht an dem Teil Ihres Skripts liegt, den Sie nicht gepostet haben. Als nächstes müssen Sie Ihr Skript ändern, um neben "dataSource" weitere "layer.supports"-Eigenschaften zu testen. Ich verwende die folgende Version:

für lyr in lyrList: dType = "UNK" dName = "UNK" dPath = "UNK" if lyr.supports("dataSource"): if lyr.supports("workspacePath"): dPath = lyr.workspacePath if lyr.supports( "datasetName"): dName = lyr.datasetName try: dType = arcpy.Describe(lyr.dataSource).datasettype außer: dType = "Möglicher defekter Link" else: if lyr.isGroupLayer: dType = "Group Layer" if lyr.supports ("SERVICEPROPERTIES"): arcpy.AddMessage('Found map survice') dType = lyr.serviceProperties["ServiceType"]