I work with ArcGIS 10.3 and I try to search a specific layer (with dataSource named "D:\desktop\Project\layers1円.jpg" ) in hundred of mxd's that spread in folder "D:\PROJECTS" and it divided to hundred of sub folders, using python 2.7.8:
import arcpy,os,sys
import arcpy.mapping
from arcpy import env
env.workspace = r"D:\PROJECTS"
for mxdname in arcpy.ListFiles("*.mxd"):
mxd = arcpy.mapping.MapDocument(r"D:\desktop\Project\\" + mxdname)
dfList = arcpy.mapping.ListDataFrames(mxd, "*")
for df in dfList:
for lyr in arcpy.mapping.ListLayers(mxd, "", df):
if lyr.isGroupLayer == True: continue
if lyr.dataSource == r"D:\desktop\Project\layers1円.jpg":
print mxdname, mxdname.pathway
mxd.save()
del mxd
Finally, I want that python will print all the mxd's source name that contain the specific layer I search for. When I run the code I get error:
project1.mxd
Traceback (most recent call last):
File "C:\Users\yaron.KAYAMOT\Desktop\idle.pyw", line 13, in <module>
print mxdname, mxdname.pathway
AttributeError: 'unicode' object has no attribute 'pathway'
2 Answers 2
From the listfiles docs:
Returns a list of files in the current workspace based on a query string
So mxdname does not have a pathway attribute. It's simply a string of the mxd name.
Finally, i used this code:
import arcpy
from arcpy import mapping as m
from os import path, walk
root_directory = r"D:\PROJECTS"
path_to_find = r"F:\GIS\topo_5000050000円.sid"
def FindMaps(root_directory, path_to_find):
maps = []
for root, dirnames, filenames in walk(root_directory):
for fname in [f for f in filenames if f.endswith(".mxd")]:
mxdPath = path.join(root, fname)
if not path.isfile(mxdPath):
continue
mxd = m.MapDocument(mxdPath)
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
for df in m.ListDataFrames(mxd):
for lyr in m.ListLayers(mxd, data_frame=df):
if lyr.supports("DATASOURCE"):
if lyr.dataSource == path_to_find:
print(mxdPath)
maps.append(mxdPath)
break
return maps
FindMaps(root_directory, path_to_find)
Explore related questions
See similar questions with these tags.