1

I am trying to make changes to titles on multiple mxds instead of having to open 1 by 1 but keep getting an error.

import arcpy.mapping as mapping, os for root, dirs, files in os.walk(r"F:\Final Maps\New folder"): # GetPArameterAsTExt(0) for name in files: filename = os.path.join(root, name) if ".mxd" in filename: mxd = mapping.MapDocument(filename) for map in mxd: for elm in arcpy.mapping.ListLayoutElements(map, "TEXT_ELEMENT"): if elm.text == "TEST 90666": elm.text = "9067" 

This is the error that I am getting:

enter image description here

1
  • 1
    Please always provide errors as text rather than pictures. Commented Dec 5, 2018 at 12:25

2 Answers 2

3

You are getting this error because the arcpy.mapping.MapDocument object does not support iteration. You would need to construct a list of map document files (which can be done with os.walk() or a list of arcpy.mapping.MapDocument objects and then iterate it.

So the line for map in mxd: should be removed.

import arcpy.mapping as mapping, os for root, dirs, files in os.walk(r"F:\Final Maps\New folder"): # GetParameterAsText(0) for name in files: filename = os.path.join(root, name) if ".mxd" in filename: mxd = mapping.MapDocument(filename) for elm in arcpy.mapping.ListLayoutElements(map, "TEXT_ELEMENT"): if elm.text == "TEST 90666": elm.text = "9067" 
3
  • Thank you for the help, the code now seems to run with no issues but the titles have not changed when I open the mxd files Commented Dec 5, 2018 at 17:02
  • 1
    You need to save the MXD after you make the changes to the text element. mxd.save() Commented Dec 5, 2018 at 17:35
  • 1
    That's right, the changes should be saved. I have focused on the error you are receiving and have overlooked the saving operation. Commented Dec 5, 2018 at 19:35
0

I have now made some changes to the code which it works but it is only updating 1 mxd file instead of all 3 I have in the folder. Any suggestions?

import arcpy, os from os import listdir mxdPath = r"C:\Users\Admin\Desktop\Final Maps\New folder" mxdFiles = [ f for f in listdir(mxdPath) if os.path.isfile(os.path.join(mxdPath,f)) and f[-3:] == 'mxd' ] try: map = arcpy.mapping for mxdFile in mxdFiles: mxd = map.MapDocument(mxdPath + "\\" + mxdFile) for elm in map.ListLayoutElements(mxd,"TEXT_ELEMENT"): if elm.text == "CountyProject130": elm.text = "Testing709" mxd.save() del mxd print "Complete!" 
3
  • Please post a new question next time to get someone to provide an answer. For now, your problem is that you run mxd.save() outside of the for loop - indent the mxd.save() to the right one level. Commented Dec 6, 2018 at 13:31
  • Please ask another question Commented Dec 6, 2018 at 15:40
  • I will ask it in another question, I apologize and thanks everyone, indent did not work. Commented Dec 6, 2018 at 18:47

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.