2 votos

AttributeError: 'unicode' object has no attribute '_arc_object' from arcpy.mapping.ListLayers?

Estoy tratando de escribir un script que me permita listar los archivos .mxd en una carpeta y luego listar las capas en cada documento de mapa, sin embargo, sigo obteniendo este error:

Traceback (última llamada más reciente): Archivo " C:\Python27\ArcGIS10.1\Lib\site -paquetes \pythonwin\pywin\framework\scriptutils.py ", línea 326, en RunScript exec codeObject in principal . dictar Archivo " C:\Users\Daimon Enfermera \Desktop\DFMPROJECT\Scripts\editmapdocument8.py ", línea 9, en lyr = arcpy.mapping.ListLayers(file) Archivo " C:\Program Archivos (x86) \ArcGIS\Desktop10.1\arcpy\arcpy\utils.py ", línea 181, en fn_ return fn(*args, **kw) Archivo " C:\Program Archivos (x86) \ArcGIS\Desktop10.1\arcpy\arcpy\mapping.py ", línea 1499, en ListLayers result = mixins.MapDocumentMixin(map_document_or_layer).listLayers(wildcard, data_frame) Archivo " C:\Program Archivos (x86) \ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py ", línea 822, en listLayers layers = self.layers Archivo " C:\Program Archivos (x86) \ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py ", línea 682, en capas for frame in reversed(self.dataFrames): Archivo " C:\Program Archivos (x86) \ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py ", línea 694, en dataFrames return map(convertArcObjectToPythonObject, self.pageLayout.dataFrames) Archivo " C:\Program Archivos (x86) \ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py ", línea 678, en pageLayout return convertArcObjectToPythonObject(self._mxd._arc_object.pageLayout) AttributeError: el objeto 'unicode' no tiene el atributo '_arc_object'

Este es el código que estoy utilizando :

import arcpy
import os

PATH2 = r"C:\Users\Daimon Nurse\Desktop\DFMPROJECT"
arcpy.env.workspace = PATH2
arcpy.env.overwriteOutput=True

for file in arcpy.ListFiles("*.mxd"):
    lyr = arcpy.mapping.ListLayers(file)
    print file

5voto

Pruebe a convertir "archivo" en un nombre de ruta completo y, a continuación, abra el documento con mapping.MapDocument, de este modo:

for file in arcpy.ListFiles("*.mxd"):
    filePath = os.path.join(PATH2,file)
    print filePath
    MapDoc = arcpy.mapping.MapDocument(filePath)
    lyrList = arcpy.mapping.ListLayers(MapDoc)
    for Lyr in lyrList:
        print Lyr

1voto

UnkwnTech Puntos 21942

Usted está tratando de listar las capas de una cadena llamada file que resulta ser un nombre de mapa (*.mxd).

Es necesario utilizar arcpy.MapDocument() para hacer un objeto de documento de mapa a partir de eso primero.

1voto

Tedy Puntos 46

Para arcpy.mapping.ListLayers para que funcione, su entrada debe ser un objeto mapa. Los objetos mapa se crean con arcpy.MapDocument()

Inténtalo:

for file in arcpy.ListFiles("*.mxd"):
    mxd = arcpy.MapDocument(file) 
    lyr = arcpy.mapping.ListLayers(mxd)
    print file

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X