Python 我可以用一种更简单、更流畅的方式来完成吗?(以ArcPy表示)

Python 我可以用一种更简单、更流畅的方式来完成吗?(以ArcPy表示),python,arcpy,arcmap,Python,Arcpy,Arcmap,对于一个项目,我添加字段,然后用表中已经包含的数据填充这些字段。添加字段很容易 arcpy.AddField_management("PLSSFirstDivision","TRS","TEXT","","",20) arcpy.AddField_management("PLSSFirstDivision","TWN","TEXT",&

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

arcpy.AddField_management("PLSSFirstDivision","TRS","TEXT","","",20) 
arcpy.AddField_management("PLSSFirstDivision","TWN","TEXT","","",20)
arcpy.AddField_management("PLSSFirstDivision","SEC","TEXT","","",20)
arcpy.AddField_management("PLSSFirstDivision","RNG","TEXT","","",20) 
arcpy.AddField_management("PLSSFirstDivision","TWN_D","TEXT","","",20)
arcpy.AddField_management("PLSSFirstDivision","RNG_D","TEXT","","",20) 
然后我需要从字段(字符串)中获取特定的数字,我只能在ArcMaps计算器中使用它,而不能在Python窗口中使用它。数据如下:(需要加粗)

LA180230N0120E0SN100

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")

实际上我还没有运行这些函数,所以我的语法可能有点不正确,但是您需要找到一个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")

这些是我喜欢使用的复杂属性操作。您可以在一次迭代中操作多个字段的内容,然后一次写出每行的更新

以arcpy.da.updateCursors(“PLSSFirstDivision”、“FRSTDIVID”、“TRS”、“TWN”、“SEC”、“RNG”、“TWN\u D”、“RNG\u D”)作为光标:
对于光标中的行:
frstdivid=行[0]
#尝试对此进行字符串切片,而不是使用'MID'函数
#可以在同一行中去掉前导零
twn=frstdivid[5:7].lstrip('0')
rng=frstdivid[10:12].lstrip('0')
sec=frstdivid[17:19].lstrip('0')
#我不确定根据您提供的代码如何计算twn_d和rng_d,但是。。。
twn_d=foo
rng\u d=巴
#使用所有这些来计算trs
trs='T{}{}{}{}-{}SEC'。格式(twn,twn\u d,rng,rng\u d,SEC)
#将计算值分配回行位置
行[1]=trs
第[2]行=twn
第[3]行=秒
第[4]行=rng
第[5]行=行号
第[6]行=rng\U d
#将包含完整值的新行从内存写入表
cursor.updateRow(行)

这些是我喜欢使用的复杂属性操作。您可以在一次迭代中操作多个字段的内容,然后一次写出每行的更新

以arcpy.da.updateCursors(“PLSSFirstDivision”、“FRSTDIVID”、“TRS”、“TWN”、“SEC”、“RNG”、“TWN\u D”、“RNG\u D”)作为光标:
对于光标中的行:
frstdivid=行[0]
#尝试对此进行字符串切片,而不是使用'MID'函数
#可以在同一行中去掉前导零
twn=frstdivid[5:7].lstrip('0')
rng=frstdivid[10:12].lstrip('0')
sec=frstdivid[17:19].lstrip('0')
#我不确定根据您提供的代码如何计算twn_d和rng_d,但是。。。
twn_d=foo
rng\u d=巴
#使用所有这些来计算trs
trs='T{}{}{}{}-{}SEC'。格式(twn,twn\u d,rng,rng\u d,SEC)
#将计算值分配回行位置
行[1]=trs
第[2]行=twn
第[3]行=秒
第[4]行=rng
第[5]行=行号
第[6]行=rng\U d
#将包含完整值的新行从内存写入表
cursor.updateRow(行)