ArcGIS 字段计算器 Python 坑

最近要处理个简单数据,一个字段中为文本类型,包含各种描述。要求是包含平方米的数值提取出来,变成数值,如果包含多个,则把各个值累加起来。

比如 字段值为 “非法占用100平方米” 处理后结果为 100

字段值为 “工棚3间” 处理结果为0

字段值为 “工棚3间,瓦屋2间,非法占用100平方米” 处理结果100

字段值为 “工棚100平方米,瓦屋100平方米” 处理结果为200

 

由于一直写.net,上述功能在.net中做起来并不麻烦。但是觉得应该是字段计算器写写就解决的问题,懒得在用.net搭。就尝试了一下ArcGIS中的Python字段计算器

四五年前学过一点python,虽然现在啥都不记得了

搜索了一些arcgis字段计算器的资料,大体瞄了一眼代码,就开始写。amazing Python

(1)python是用代码缩进表示C#中{}啊,字段计算器中的编辑页面就是个txt,啥功能也没有啊,自己一边写逻辑,一边改缩进。而且网上复制粘贴的代码,很容易缩进就乱掉了

(2)python中,定义函数名之后有个 “:”, if条件之后也有个 “:”,而且ArcMap的字段计算器不能调试

(3)神奇的 unicode decode error: 'ascii' codesc can't decode 0xe5 in position 异常,检索了半天资料,后来发现,是编码的问题。不知道什么原因,按错误描述,应该是ArcMap字段计算器读取的值是 ascii,而我要判断的值是 中文,就出了这个 错误,可我字段中的值明明是中文啊。该错误对新手很不友好啊

 

虽然上述功能没有完全实现,也不想实现了,下面记录一下这段神奇的代码

def fuxkPython(ss):
 flag="平方米"
 result=-1
 tp=ss.encode('utf-8');
 # tp =ss
 id=tp.find(flag)

 if(id>=0):
   jq=tp[0:id]
   if jq.isdigit():
     result= float(jq)

 return result

  

amazing

 

posted @ 2019-07-09 11:32  DayDreamInGIS  阅读(1580)  评论(0编辑  收藏  举报