views:

290

answers:

2

I have a fairly simple python loop that calls a few functions, and writes the output to a file. To do this is creates a folder, and saves the file in this folder.

When I run the program the first time with a unique file name, it runs fine. However, if I try to run it again, it will not work and I do not understand why. I am quite certain that it is not a problem of overwriting the file, as I delete the folder before re-running, and this is the only place that the file is stored. Is there a concept that I am mis-understanding?

The problematic file is 'buff1.shp'. I am using Python 2.5 to run some analysis in ArcGIS

Thanks for any advice (including suggestions about how to improve my coding style). One other note is that my loops currently only use one value as I am testing this at the moment.

# Import system modules
import sys, string, os, arcgisscripting, shutil

# Create the Geoprocessor object
gp = arcgisscripting.create()

# Load required toolboxes...
gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Spatial Statistics Tools.tbx")
gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Analysis Tools.tbx")

# specify workspace
gp.Workspace = "C:/LEED/Cities_20_Oct/services"
path = "C:\\LEED\\Cities_20_Oct\\services\\"

results = 'results\\' 
os.mkdir( path + results )      
newpath = path + results

# Loop through each file (0 -> 20)
for j in range(0,1):
    in_file = "ser" + str(j) + ".shp"
    in_file_2 = "ser" + str(j) + "_c.shp"
    print "Analyzing " + str(in_file) + " and " + str(in_file_2)    

    #Loop through a range of buffers - in this case, 1,2
    for i in range(1,2):
        print "Buffering....."  

        # Local variables...
        center_services = in_file_2
        buffer_shp = newpath + "buff" + str(i) + ".shp"
        points = in_file_2
        buffered_analysis_count_shp = newpath + "buffered_analysis_count.shp"
        count_txt = newpath + "count.txt"

        # Buffer size
        b_size = 1000 + 1000 * i
        b_size_input = str(b_size) + ' METERS'

        print "Buffer:" + b_size_input + "\n"

        # Process: Buffer...
        gp.Buffer_analysis(center_services, buffer_shp, b_size_input, "FULL", "ROUND", "ALL", "")
        print "over"

(To clarify this question I edited a few parts that did not make sense without the rest of the code. The error still remains in the program.)

Error message:

 ExecuteError: ERROR 000210: Cannot create output C:\LEED\Cities_20_Oct\services\results\buff1.shp Failed to execute (Buffer).
+1  A: 

I can't see how the file name in the error message blahblah\buff1.shp can arise from your code.

for i in range(0,1):
    buffer_shp = newpath + "buff" + str(i) + ".shp"
    gp.Buffer_analysis(center_services, buffer_shp, etc etc)

should produce blahblah\buff0.shp not blahblah\buff1.shp... I strongly suggest that the code you display should be the code that you actually ran. Throw in a print statement just before the gp.Buffer_analysis() call to show the value of i and repr(buffer_shp). Show all print results.

Also the comment #Loop through a range of buffers (1 ->100) indicates you want to start at 1, not 0. It helps (you) greatly if the comments match the code.

Don't repeat yourself; instead of

    os.mkdir( path + results )      
    newpath = path + results

do this:

    newpath = path + results # using os.path.join() is even better
    os.mkdir(newpath)

You might like to get into the habit of constructing all paths using os.path.join().

You need to take the call to os.mkdir() outside the loops i.e. do it once per run of the script, not once each time round the inner loop.

The results of these statements are not used:

    buffered_analysis_count_shp = newpath + "buffered_analysis_count.shp"
    count_txt = newpath + "count.txt"

Update

Googling with the first few words in your error message (always a good idea!) brings up this: http://blogs.esri.com/Dev/blogs/geoprocessing/default.aspx?p=2 ... then do a Ctrl-F search for ERROR 000210 on the browser page; you'll get to this:

"""geoprocessing errors that occur when reading or writing ArcSDE/DBMS data receive a generic 'catch-all' error message, such as error 00210 when writing output"""

which goes on to suggest some ways of determining what your exact problem is. If that doesn't help you, you might like to try asking in the relevant ESRI forum.

John Machin
One problem I noticed was that ArcMap sometimes changes the script location even if you specify a different source. I was unaware of this, and I think if you open and close the program verifying that it uses the script you specified it should be ok.
womble
A: 

I'd be tempted to look again at

path = "C:\LEED\Cities_20_Oct\services\"

Surely you want double front slashes, not double back slashes?

Gerry