ArcGIS Field Calculator: Ошибка синтаксиса условного оператора - PullRequest
0 голосов
/ 11 октября 2018

Рудиментарные навыки Python / ArcPy на работе здесь, не знаю, где я ошибаюсь.

Попытка сделать простой случайный выбор из 10 объектов из слоя, который будет указан путем размещения "1"в другом атрибуте, выделенном для этой цели.Основная концепция заключается в том, чтобы использовать random.sample () для генерации случайного списка из 10 FID, а затем проверить, присутствует ли каждый FID в списке.NewID - это атрибут, содержащий значения FID.Это то, что у меня есть в блоке кода:

import random
def randSelTen():
      featurecount = arcpy.GetCount_management("layer_name")
      linecount = int(str(featurecount))
      lst_oids = range(0, linecount)
      rand_lines = random.sample(lst_oids, 10)
      if !NewID! in rand_lines:
           return 1
      else:
           return 0

Я получаю синтаксическую ошибку в условном содержимом! NewID !, и что бы я ни делал, я не могу это исправить.Если я заменю! NewID!с целым числом, скрипт выполняется, но, конечно, вывод плохой.Любая помощь приветствуется ... спасибо!

1 Ответ

0 голосов
/ 11 октября 2018

Если вы помещаете этот код в «кодовый блок» калькулятора полей, то причина, по которой вы получаете синтаксическую ошибку, заключается в том, что вы не можете получить доступ к таким полям из кодового блока.Вы должны передать в поле в качестве аргумента функции.Так что вам придется сделать это:

# -----Codeblock---------
import random
def randSelTen(NewID):
  featurecount = arcpy.GetCount_management("layer_name")
  linecount = int(str(featurecount))
  lst_oids = range(0, linecount)
  rand_lines = random.sample(lst_oids, 10)
  if NewID in rand_lines:
       return 1
  else:
       return 0

# ----- Expression (goes in bottom text box of the field calculator if using GUI) -----
randSelTen(!NewID!)
...