I have written a python script to export my mxd into a pdf (not using data driven pages). I am getting the error that my mxd path is incorrect! I have included my script below. Any help would be appreciated.
# Necessary modules
import arcpy, os, string, sys
# For less complicated scripts -
# these 2 imports are necessary to utilize a simpler method of debugging outher than traceback
import win32ui, win32con
# example debug message to screen ......
# arcpy.AddMessage("mxd_file = " + str(mxd_file))
# val = win32ui.MessageBox("mxd_file = " + str(mxd_file), "title",
#win32con.MB_OKCANCEL)
#Paramaters...
mxdList = string.split(arcpy.GetParameterAsText(0), ";")
dir = arcpy.GetParameterAsText(1)
#Loop thru & take the base name of each MXD selected and append all map pages to a single pdf
# and save to chosen directory......
for mxdPath in mxdList:
mxd = arcpy.mapping.MapDocument(mxdPath)
name = mxdPath[:-4] + ".pdf"
file = dir + os.sep + os.path.basename(name)
ddp = mxd
ddp.exportToPDF(file, "ALL")
del mxd, file
-
4Have you tried including a message to check 'mxdPath' to ensure it's a valid path?bluefoot– bluefoot2013年02月22日 21:39:08 +00:00Commented Feb 22, 2013 at 21:39
-
1Also, can you give an example of how you are calling the script? Are you using fully qualified paths?nicksan– nicksan2013年02月22日 22:49:27 +00:00Commented Feb 22, 2013 at 22:49
1 Answer 1
I think the comments have addressed your immediate issue, but here are just a few suggestions for writing cleaner, more "Pythonic" code:
- When choosing names for variables (or, more correctly termed in Python, "identifiers"), avoid using names of built-in types and functions.
file
anddir
are examples of these.name
is not, but it's pretty generic. Try to use descriptive identifiers, not only to avoid naming conflicts, but to help yourself and others better understand your code. Take advantage of the standard library (and check out Doug Hellman's PyMOTW site for a whirlwind tour). For example, you could use the functions in the
os.path
module (see also the PyMOTW article on it) to make your path manipulations more robust and clear to other Python programmers.Instead of:
name = mxdPath[:-4] + ".pdf"
Use
os.path.splitext
,os.extsep
and the built-injoin
method for string objects (might as well doos.path.basename
here as well):pdfBaseName = os.path.basename(os.extsep.join([os.path.splitext(mxdPath)[0], "pdf"]))
Instead of:
file = dir + os.sep + os.path.basename(name)
Use
os.path.join
:pdfPath = os.path.join(outputFolder, pdfBaseName)
(moved
os.path.basename
to previous line and changed your variable names as well)
- See PEP 8 - Style Guide for Python Code
- See Code Like a Pythonista: Idiomatic Python
- Use a real Python IDE, like PyScripter or Eclipse with PyDev. Use their interactive debuggers to step through your code, inspect variables, and generally get a better understanding of what is going on at any moment in your program.