问题描述
对于一个项目,我要添加字段,然后用表中已包含的数据填充这些字段。添加字段很容易。
arcpy.AddField_management("PLSSFirstDivision","TRS","TEXT","",20)
arcpy.AddField_management("PLSSFirstDivision","TWN",20)
arcpy.AddField_management("PLSSFirstDivision","SEC","RNG","TWN_D","RNG_D",20)
然后,我需要从字段(字符串)中获取特定的数字,我只能在ArcMaps计算器而不是Python窗口中使用它。数据看起来像这样:(需要加粗)
LA180 23 0N0 12 0E0SN 10 0
TWN = MID([FRSTDIVID],6,2)
RNG = MID([FRSTDIVID],11,2)
SEC = MID([FRSTDIVID],18,2)
然后,我需要为这3个字段删除开头的“ 0”:
TWN = !TWN!.lstrip('0')
RNG = !RNG!.lstrip('0')
SEC = !SEC!.lstrip('0')
比将它们全部添加到最终字段中
TRS = "T"+ [TWN]+ [TWN_D]+"R" + [RNG]+ [RNG_D]+"-" + "SEC" + [SEC]
感谢您的帮助,只是想了解更多信息
解决方法
我实际上还没有运行这些命令,因此我的语法可能有点差,但是您需要拿出一个python表达式来生成所需的字符串,然后使用arcpy的CalculateField方法更新表。如果您在字段计算器窗口中测试表达式,则应该能够将最终表达式复制/粘贴到下面的语句中。
arcpy.CalculateField_management("PLSSFirstDivision","TWN","!FRSTDIVID![6:2].lstrip('0')","PYTHON3")
arcpy.CalculateField_management("PLSSFirstDivision","TRS","'T' + !TWN!+ !TWN_D!+'R' + !RNG!+ !RNG_D!+'-SEC' + !SEC!","PYTHON3")
,
这些是我喜欢使用UpdateCursor
进行的复杂属性操作。您可以一次迭代操作多个字段的内容,然后一次写出每一行的更新。
with arcpy.da.UpdateCursor("PLSSFirstDivision",["FRSTDIVID","SEC","RNG","TWN_D","RNG_D"]) as cursor:
for row in cursor:
frstdivid = row[0]
# try string slicing for this instead of the `MID` function
# and you can strip leading zeroes in the same line
twn = frstdivid[5:7].lstrip('0')
rng = frstdivid[10:12].lstrip('0')
sec = frstdivid[17:19].lstrip('0')
# was not sure how twn_d and rng_d are calculated based on your provided code,but...
twn_d = foo
rng_d = bar
# use all these to calculate trs
trs = 'T{}{}R{}{}-{}SEC'.format(twn,twn_d,rng,rng_d,sec)
# assign the calculated values back to row positions
row[1] = trs
row[2] = twn
row[3] = sec
row[4] = rng
row[5] = twn_d
row[6] = rng_d
# write the new row with complete values from memory to your table
cursor.updateRow(row)