最近要處理個簡單數據,一個字段中為文本類型,包含各種描述。要求是包含平方米的數值提取出來,變成數值,如果包含多個,則把各個值累加起來。
比如 字段值為 “非法占用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