[GIS] AttributeError: ‘unicode’ object has no attribute ‘_arc_object’ from arcpy.mapping.ListLayers

arcgis-10.1arcgis-desktoparcpypython

I'm trying to write a script that allows me to list .mxd files in a folder and then list the layers in each map document, however, I keep getting this error:

Traceback (most recent call last): File
"C:\Python27\ArcGIS10.1\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py",
line 326, in RunScript
exec codeObject in main.dict File "C:\Users\Daimon Nurse\Desktop\DFMPROJECT\Scripts\editmapdocument8.py", line 9, in

lyr = arcpy.mapping.ListLayers(file) File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\utils.py", line 181, in fn_
return fn(*args, **kw) File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\mapping.py", line 1499, in
ListLayers
result = mixins.MapDocumentMixin(map_document_or_layer).listLayers(wildcard,
data_frame) File "C:\Program Files
(x86)\ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py", line 822,
in listLayers
layers = self.layers File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py", line 682,
in layers
for frame in reversed(self.dataFrames): File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py", line 694,
in dataFrames
return map(convertArcObjectToPythonObject, self.pageLayout.dataFrames) File "C:\Program Files
(x86)\ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py", line 678,
in pageLayout
return convertArcObjectToPythonObject(self._mxd._arc_object.pageLayout)
AttributeError: 'unicode' object has no attribute '_arc_object'

This is the code I am using :

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    

Best Answer

Try converting "file" to a full pathname, then opening the doc with mapping.MapDocument, like this:

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