2016-04-18 5 views
0

Использование ArcDesktop 10.1 & Python 2.7: Я работаю над кодом, который ищет значения в пределах 13 полей и, основываясь на том, что он находит в этих 13 полях, объединяет строку и помещает приведет к существующему (пустому) полю.Неисправность с помощью UpdateCursor при установке значения

Он использует поисковый курсор для поиска по 13 полям. Затем использует результат этого в курсоре обновления для конкатенации строки.

У меня возникли проблемы с получением результата в поле, используя setValue - Line 40 кода ниже @ urow.setValue (комментарииField, easementType). Сообщение об ошибке очень бесполезно (RuntimeError: ERROR 999999: Ошибка при выполнении функции.)

Я не уверен, как правильно получить значение, заданное в нужном поле. Любая помощь будет принята с благодарностью!

import arcpy, os, math 
from itertools import izip 
arcpy.env.workspace = "C:\\Users\\mdelgado\\Desktop\\WorkinDog.gdb" 

#These are my variables 
fc = "EASEMENTS" 
commentsField = "Comments" 
typeFields = ["ABANDONED", "ACCESS", "AERIAL", "BLANKET", "COMM", "DRAIN", "ELEC", "GEN_UTIL", "LANDSCAPE", "PARKING", "PIPELINE", "SAN_SEWR", "SIDEWALK", "SPECIAL", "STM_SEWR", "WATER"] 
fieldNames = ["ABANDONED", "ACCESS", "AERIAL", "BLANKET", "COMMUNICATION", "DRAINAGE", "ELECTRIC", "GENERAL UTILITY", "LANDSCAPE", "PARKING", "PIPELINE", "SANITATION SEWER", "SIDEWALK", "SPECIAL", "STORM SEWER", "WATER"] 
fieldValues = [] 
easementType = "" 

#This is my search cursor 
scursor = arcpy.SearchCursor(fc) 
srow = scursor.next() 
for field in typeFields: 
    srowValue = (srow.getValue(field)) 
    fieldValues.append(srowValue) 
    srow = scursor.next() 
print fieldValues 

#This is my update cursor 
ucursor = arcpy.UpdateCursor(fc) 
for urow in ucursor: 

    #This is where I begin the loop to concatenate the comment field 
    for (value, name) in izip(fieldValues, fieldNames): 
     print str(value) + " " + name 

     #This is where I check each field to find out which types the easement is 
     if value == 1: 
      easementType = easementType + name + ", " 

    #This is where I format the final concatenated string 
    easementType = easementType[:-2] 
    print easementType 

    #This is where the field is updated with the final string using the cursor 
    urow.setValue(commentsField, easementType) 
    ucursor.updateRow(urow) 
    urow = cursor.next() 

del urow 
del ucursor 
del srow 
del scursor 
+0

выполнить ли это правильно для некоторых строк, а затем перерыв? Вы проверили, что длина поля «Комментарии» достаточно, чтобы разместить максимально длинный конкатенированный 'easementType'? – Erica

+1

Отличное предложение! Изучая это, я обнаружил, что ссылаюсь на псевдоним поля, а не на фактическое имя поля. Это решило одну проблему. –

ответ

0

Ошибка неформативной 999999 является одной из самых плохих.

Я предлагаю пару модификаций вашего подхода, которые упрощают устранение неполадок. Во-первых, use the da Cursors - они быстрее, а синтаксис немного проще.

Во-вторых, вам не требуется отдельный поиск и обновление. Обновление может «искать» другие поля в той же строке в дополнение к обновлению полей. (Текущий код, предполагая, что она работает правильно, будет положить те же fieldValues в каждом подряд UpdateCursor пострадавших.)

fieldNames = ["ABANDONED", "ACCESS", "AERIAL", "BLANKET", "COMMUNICATION", "DRAINAGE", 
       "ELECTRIC", "GENERAL UTILITY", "LANDSCAPE", "PARKING", "PIPELINE", "SANITATION SEWER", 
       "SIDEWALK", "SPECIAL", "STORM SEWER", "WATER"] 
cursorFields = ["ABANDONED", "ACCESS", "AERIAL", "BLANKET", "COMM", "DRAIN", 
       "ELEC", "GEN_UTIL", "LANDSCAPE", "PARKING", "PIPELINE", "SAN_SEWR", 
       "SIDEWALK", "SPECIAL", "STM_SEWR", "WATER", "Comments"] 

with arcpy.da.UpdateCursor(fc, cursorFields) as cursor: 
    for row in cursor: 
     easementType = "" 
     for x in range(13): 
      if row[x] == 1: 
       easementType += fieldNames[x] + ", " 
     easementType = easementType[:-2] 
     print easementType 

     row[13] = easementType 
     cursor.updateRow(row) 
+0

Эти модификации великолепны! Они решили все мои проблемы. Теперь скрипт работает отлично. Я не могу поблагодарить вас за ваш совет! –

+0

Добро пожаловать :) – Erica