Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

What I want to do is to go into a folder, find a layer file, pull it into an MXD, then export a jpeg in an output folder. Everything is great except I don't know how to set the input/output folders.

state =  arcpy.GetParameterAsText(0)
In_Folder = arcpy.GetParameterAsText(1)
Out_Folder = arcpy.GetParameterAsText(2)


lyrfile_o = arcpy.mapping.Layer(In_Folder + str(state) + "_O.lyr")
lyrfile_d = arcpy.mapping.Layer(In_Folder + str(state) + "_D.lyr")
lyrfile_lane = arcpy.mapping.Layer(In_Folder + str(state) + "_Lanes_.lyr")
lyrfile_poly = arcpy.mapping.Layer(In_Folder + str(state) + "_Lanes_Polys1.lyr")

and I get an error like:

<type 'exceptions.ValueError'>: Object: CreateObject Layer invalid data source>

It's written in a text editor then brought into a toolbox and parameters set, both types as folders, the first one (state) is a string.

Any ideas?

share|improve this question
add comment

2 Answers 2

Suggestions:

  • Use os.path.join to join folder paths to filenames.
  • Use string formatting (either the newer .format() method or the older modulo (%) method) instead of the concatentation operator (+)
  • Do not use output parameters for what are really inputs. In this case the "output" folder is just an input path (string), not an actual piece of data output by your script.
  • Use an output parameter for data that is created within your script, such as the JPEG file you create. This is optional and is meant to facilitate chaining script tools together in ModelBuilder so in some cases (like this one) it is probably not necessary.
  • Use an IDE such as PyScripter to debug your Python scripts. PyScripter allows you to specify command line parameters and debug interactively.

Here's an example of combining the first two suggestions (using the older modulo string formatting which is what I'm more familiar with):

lyrfile_o = arcpy.mapping.Layer(os.path.join(In_Folder, "%s_%s" % (state, "O.lyr")))
share|improve this answer
add comment

I think what you're looking for can be accomplished with a script tool. Basically ArcGIS allows you to turn a stand-alone python script into a tool in ArcToolbox. When you create the tool, you're given the option to define parameters (including the type, i.e. folder, geodatabase, dataset, string, etc.).

This aught to walk you through the process of turning your script into a tool if this is what you're really after.

share|improve this answer
    
Sounds like it already is a script tool. –  blah238 Jun 14 '12 at 8:43
    
Then defining the output as a directory should be easy –  Roy Jun 14 '12 at 11:17
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.