Suite

Erreur de code - supprimer la couche à l'aide de python


En continu, à Comment supprimer les couches qui ne sont pas dans l'étendue df visible, j'essaie de supprimer les couches qui n'apparaissent pas dans le bloc de données avec ce code :

import arcpy,os from arcpy import env env.workspace = r"C:Project" pour mxdname dans arcpy.ListFiles('*.mxd'): print mxdname mxd = arcpy.mapping.MapDocument(os.path.join(env .workspace, mxdname)) df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] pour lyr dans arcpy.mapping.ListLayers(mxd, "" ,df): si df.extent.disjoint(lyr.getExtent ()): arcpy.mapping.RemoveLayer(df, lyr) print 'removed' ,lyr mxd.save() del mxd

mais j'obtiens une erreur :

>>> antiquities.mxd ecology.mxd land_use2 a2.mxd supprimé Bad_smell supprimé polygon_1 supprimé polygon_1 Traceback (appel le plus récent en dernier): Fichier "C:/Users/yaron.KAYAMOT/Desktop/python2.py", ligne 14, dans  if df.extent.disjoint(lyr.getExtent()): Fichier "C:Program Files (x86)ArcGISDesktop10.3ArcPyarcpyarcobjectsarcobjects.py", ligne 144, en retour disjoint convertArcObjectToPythonObject( self._arc_object.Disjoint(*gp_fixargs([second_geo metry]))) ValueError: None >>>

MISE À JOUR : j'essaie les conseils de GISGe dans le code :

import arcpy,os from arcpy import env env.workspace = r"C:Project" pour mxdname dans arcpy.ListFiles('*.mxd'): print mxdname mxd = arcpy.mapping.MapDocument(os.path.join(env .workspace, mxdname)) df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] pour lyr dans arcpy.mapping.ListLayers(mxd, "" ,df) : si lyr.getExtent() != Aucun : if df.extent.disjoint(lyr.getExtent()): arcpy.mapping.RemoveLayer(df, lyr) mxd.save() del mxd

mais aucun ajout de couche n'a été supprimé et j'ai obtenu :

antiquités.mxd écologie.mxd ta34b4.mxd ta35_mirkamim.mxd >>>

Vous avez probablement un calque sans étendue, comme un groupe de calques. Ajoutez une condition pour vérifier cela avant de comparer l'étendue du bloc de données avec celle de la couche :

… pour lyr dans arcpy.mapping.ListLayers(mxd, "" ,df) : si lyr.getExtent() != Aucun : si df.extent.disjoint(lyr.getExtent()): arcpy.mapping.RemoveLayer(df, lyre)…


Voir la vidéo: comment on fait pour supprimer le code derreurs (Octobre 2021).