实践数据:XX县三调地类图斑DLTB数据
实践目的:快速提取出一个县甚至更大范围数据中的乡镇名称和村名
本案例主要涉及字符串分割提取其中需要的字符串,面对这个案例,你可能会使用left()或者right()函数,left( [ZLDWMC] ,3)可以提取坐落单位名称的左边3个字,right( [ZLDWMC] ,3)可以提取坐落单位名称的右边3个字,但是我们不能保证所有的乡镇名称和村名都是3个字的,此处我总结出一个更全面一些的方法,利用“镇”或“乡”字进行字符串元素索引和切片来提取所需的信息。
分析数据,其中存在两种特殊情况
情况1:坐落单位名称不存在“乡”或“镇”,此处将返回坐落单位名称全称;
情况2:坐落单位名称存在多个“乡”或“镇”,此处将返回空,该情况存在极少数最终可手动赋值
1. 右击字段村名,使用字段计算器计算村名,解析程序选择Python,勾选显示代码块,编写逻辑代码:
#定义一个函数
def getValue(a):
d={u"镇":0,u"乡":0} #给字符串计“镇”和“乡”的数量,初始为0个
for ch in a: #遍历字符串的每一个字
if ch in d:#如果其中有字是“镇”或“乡”则计数加一
d[ch]+=1
num=d[u"镇"]+d[u"乡"] #计算该字符串中镇和乡的总数量
if num>1: #如果镇和乡的总数量大于1,那么该为情况特殊情况2,返回空
return ""
else: #否则
if u"镇" in a: #如果存在一个“镇”字
b=a.index(u"镇") #获取“镇”字在字符串里的索引号
return a[b+1:] #切片,返回字符串a里“镇”字后面的所有字,即:村名
elif u"乡" in a: #如果存在一个“乡”字
b=a.index(u"乡") #获取“乡”字在字符串里的索引号
return a[b+1:] #切片,返回字符串a里“镇”字后面的所有字,即:村名
else: #否则字符串不存在“镇”或“乡”字,那么该为情况特殊情况1,返回字符串a的全称
return a
2.代码编写完成将以下字段计算器表达式保存,可方便后续加载无限使用。字段计算器点击确定,完成村名的提取。
3. 提取乡镇名称同理
解析程序选择Python,勾选显示代码块,编写逻辑代码:
#定义一个函数
def getValue(a):
d={u"镇":0,u"乡":0} #给字符串计“镇”和“乡”的数量,初始为0个
for ch in a: #遍历字符串的每一个字
if ch in d:#如果其中有字是“镇”或“乡”则计数加一
d[ch]+=1
num=d[u"镇"]+d[u"乡"] #计算该字符串中镇和乡的总数量
if num>1: #如果镇和乡的总数量大于1,那么该为情况特殊情况2,返回空
return ""
else: #否则
if u"镇" in a: #如果存在一个“镇”字
b=a.index(u"镇") #获取“镇”字在字符串里的索引号
return a[:b+1] #切片,返回字符串a里“镇”字前面的所有字,即:乡镇名称
elif u"乡" in a: #如果存在一个“乡”字
b=a.index(u"乡") #获取“乡”字在字符串里的索引号
return a[:b+1] #切片,返回字符串a里“镇”字前面的所有字,即:乡镇名称
else: #否则字符串不存在“镇”或“乡”字,那么该为情况特殊情况1,返回字符串a的全称
return a
结果如下图所示:
也许编写代码对于新手或生手会让人觉得复杂繁琐, 那么你可以下载我已保存好的字段计算器表达式,直接加载使用
注:以上内容如若有误欢迎评论指正,谢谢!