arcpy脚本工具开发之UpdateCursor 的使用

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)

完美解决问题。
在这里插入图片描述
文字表达能力差,只能截图来凑。今天写这篇博客,是分享,更多的是记录。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半吊子读书人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值