Question

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). 
Was it helpful?

Solution

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: troubleshooting geoprocessing errors which provides the following information:

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

This 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 or on GIS StackExchange.

OTHER TIPS

I see this is a 3 year old posting, but for others will add:

As I generate python script to work with Arc, I always include right after my import:

arcpy.env.overwriteOutput=True   # This allows the script to overwrite files.

Also you mentioned you delete your "folder"?. That would be part of your directory, and I do not see where you are creating a directory in the script. You would want to clear the folder, not delete it (maybe you meant you delete the file though).

JJH

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?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top