微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我能以更轻松,更流畅的方式完成此任务吗? 在ArcPy中

如何解决我能以更轻松,更流畅的方式完成此任务吗? 在ArcPy中

对于一个项目,我要添加字段,然后用表中已包含的数据填充这些字段。添加字段很容易。

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。