проблема при повторном запуске программы - PullRequest
1 голос
/ 30 октября 2009

У меня довольно простой цикл python, который вызывает несколько функций и записывает вывод в файл. Для этого создается папка и сохраняется файл в этой папке.

Когда я запускаю программу в первый раз с уникальным именем файла, она работает нормально. Однако, если я попытаюсь запустить его снова, он не будет работать, и я не понимаю, почему. Я совершенно уверен, что это не проблема перезаписи файла, поскольку я удаляю папку перед повторным запуском, и это единственное место, где хранится файл. Есть ли понятие, что я неправильно понимаю?

Проблемный файл - «buff1.shp». Я использую Python 2.5 для запуска анализа в ArcGIS

Спасибо за любые советы (включая предложения о том, как улучшить мой стиль кодирования). Еще одно замечание: мои циклы в настоящее время используют только одно значение, так как я сейчас проверяю это.

# 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"

(Чтобы прояснить этот вопрос, я отредактировал несколько частей, которые не имели смысла без остальной части кода. Ошибка все еще остается в программе.)

Сообщение об ошибке:

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

Ответы [ 3 ]

2 голосов
/ 30 октября 2009

Я не вижу, как имя файла в сообщении об ошибке blahblah \ buff1.shp может возникнуть из вашего кода.

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

должен выдавать blahblah\buff0.shp, а не blahblah\buff1.shp ... Я настоятельно рекомендую, чтобы отображаемый вами код был тем кодом, который вы на самом деле выполняли. Добавьте оператор print перед вызовом gp.Buffer_analysis(), чтобы показать значения i и repr (buffer_shp). Показать все результаты печати. ​​

Также комментарий #Loop through a range of buffers (1 ->100) указывает, что вы хотите начать с 1, а не с 0. Это очень помогает (вам), если комментарии соответствуют коду.

Не повторяйся; вместо

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

сделать это:

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

Возможно, вы захотите построить все пути, используя os.path.join ().

Вам необходимо принять вызов os.mkdir() вне циклов, т. Е. Делать это один раз за запуск сценария, а не один раз каждый раз вокруг внутреннего цикла.

Результаты этих утверждений не используются:

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

Обновление

Поиск в первых нескольких словах вашего сообщения об ошибке ( всегда хорошая идея! ) приводит к следующему: устранение ошибок геообработки , которая предоставляет следующую информацию:

ошибки геообработки, возникающие при чтение или запись данных ArcSDE / СУБД получить общую ошибку сообщение, такое как ошибка 00210, когда вывод записи

Далее предлагаются некоторые способы определения вашей точной проблемы. Если это вам не поможет, вы можете попробовать задать вопрос на соответствующем форуме ESRI или в GIS StackExchange .

1 голос
/ 27 февраля 2013

Я вижу, что это 3-летняя публикация, но для других добавят:

Когда я генерирую скрипт Python для работы с Arc, я всегда включаю сразу после импорта:

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

Также вы упомянули, что удалили свою «папку» ?. Это было бы частью вашего каталога, и я не вижу, где вы создаете каталог в сценарии. Вы хотели бы очистить папку, а не удалять ее (возможно, вы имели в виду, что удалили файл).

JJH

0 голосов
/ 23 сентября 2010

Я бы соблазнился еще раз взглянуть на

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

Неужели вы хотите двойные косые черты, а не двойные?? 1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...