基本的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!如果使用整数,脚本将运行,但是输出当然不好。感谢您的任何帮助...谢谢!
答案 0 :(得分:1)
如果将这段代码放在字段计算器的“代码块”中,那么得到语法错误的原因是因为您无法从代码块访问类似的字段。您必须将字段作为函数的参数传递。因此,您必须这样做:
# -----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!)