2016-07-13 2 views
0

У меня проблемы с выражением для вычисления поля в ArcGIS 10.2. Я уже пробовал код в Python, и это сработало, но с небольшими изменениями, которые я должен был сделать для применения кода в ArcGIS, он не будет работать.Выражение Codeblock для ArcGIS с Python

PGIS_TXT - столбец строк, как показано ниже, первое число - это числитель посылки, который я хочу извлечь из этой строки с помощью выражения Python.

PGIS_TXT = ["31\c\u\n\2","22","1","134","23\c\u\n\1"] 


import re 
def getnumerator(PGIS_TXT): 

if (len(PGIS_TXT) > 3): 
    p=map(int, re.findall('\d+', PGIS_TXT)) 
    b=p[:-1] 
    return b 
else: 
    b= int(PGIS_TXT) 
    return b 

эти цифры должны затем хранить в своей колонке flur_za:

flur_za = getnumerator(!PGIS_TXT!) 

Результат должен быть:

[31, 22, 1, 134, 23] 

я получаю стандартную ошибку "Error 999999" и сообщение "The field is not nullable [flur_za]"

Что не так с кодом?

ответ

0

Этот код работает для меня:

def getnumerator(PGIS_TXT): 

import re 
if len(PGIS_TXT) > 3: 
    p = map(str, re.findall('\d+',PGIS_TXT)) 
    z=p[:1] 
    b=int(''.join(z)) 
else: 
    if len(PGIS_TXT)==3: 
     b=int(PGIS_TXT[:3]) 
    else: 
     if len(PGIS_TXT)==2: 
      b= int(PGIS_TXT[:2]) 
     else: 
      if len(PGIS_TXT)==1: 
       b= int(PGIS_TXT[:1]) 
return b 

Я думаю, что проблема была в первой, если-состоянии. Я получаю список с целыми значениями с помощью метода map, но мне нужно целое значение. Метод .join помог избавиться от списка.

Смежные вопросы