arcpy脚本工具开发之UpdateCursor 的使用
1.需求
有个举证信息表类似下图,要求“举证图斑预编号”字段只能填写一个或多个由字母、数字、罗马数字(ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ)组成的举证图斑预编号,但是多个编号必须用“/”隔开,不能用“\”、“、”等其他符号。(做变更的朋友应该知道我的意思o(╥﹏╥)o)
现在要arcpy制作个工具把那些不规范的筛选出来,我第一反应就是先加个字段用计算字段工具把不规范的标注出来。
用计算字段工具
但是,由于有中文标点符号和罗马数字这种特殊字符,总是出现编码问题。
这计算字段工具太恶心了,VB又不会用,以前用计算字段工具出现编码问题逻辑简单的我都会改用VB,这里用VB不知道怎么写啊!各种百度,纠结了一下午,没解决这个问题,难受!解决不了编码问题,只能另寻他法了。想了很久才想到用更新游标(UpdateCursor),虽然有也写了很多arcpy脚本,但是都没用过更新游标。
用更新游标(UpdateCursor)的代码
# -*-coding: gbk -*-
import arcpy
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
fc = arcpy.GetParameterAsText(0)
with arcpy.da.UpdateCursor(fc, ("举证图斑预编号", "编号不规范")) as cursor:
for row in cursor:
ssslist = str(row[0]).split("/") # 按“/”分割成列表
for s in ssslist:
if len(ssslist) == 2 and s.strip() == "":
row[1] = "单个编号不需要填“/”" # "1234/"的情况
elif len(ssslist) > 2 and s.strip() == "":
row[1] = "多余“/”" # "123//1234"或"12/1244/"的情况
elif s != "".join(re.findall(r"[-_ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫa-zA-Z0-9]", s)):
row[1] = "编号中有其他符号或者多个编号不是用“/”隔开"
break
cursor.updateRow(row)
完美解决问题。
文字表达能力差,只能截图来凑。今天写这篇博客,是分享,更多的是记录。