對批量差分代碼進行以下改進:
- 將較長的城市名字典另存並引用,增強代碼整潔度
#coding = UTF-8
city_names={#配合arcpy包使用python2.7,注意語法
u'東莞':'DONGGUAN',
u'成都':'CHENGDU',
u'揚州':'YANGZHOU',
u'海口':'HAIKOU',
u'北京':'BEIJING'
}
##city_dict2 = dict(zip(city_names.values(), city_names.keys()))
##print(city_names.keys())
##print(list(city_names.keys()))
- Debug——字典錯誤引用ERROR
正確方式是for key in dict: 或for key,value in dict.items():
代碼一日不寫邊生疏,需要勤於使用。
- Debug——try-except語句中try內容執行成功卻報except錯誤
一切竟然只是因爲try-except語句塊前多了一行,務必認真仔細!還應先從懷疑自身開始,認真閱讀每一行!
雖是小問題,但更值得記錄!
完善後的代碼:
#coding = utf-8
import arcpy
import os
from City_Dictionary_u5 import city_names#城市字典
#print city_names
#Workspace
inWorkspace = r'D:\19Q4M2\BACK\19Q4G2_BACK'
updateWorkspace = r'D:\19Q4M2\BACK\19Q4M2_BACK_SUBMIT'
outWorkspace = r'D:\19Q4M2\BACK\19Q4M2_BACK_SYMDIFF'
VERSION = '19Q4M2'
back_dict = {u'綠地':'GREENURBAN',u'水系':'WATER'}
num_ok = 0
num_fail = 0
for city_c in city_names:
#print city_c
cnt = 0 #計數器
city = city_names[city_c].upper()
for key in back_dict:
inFeatures = inWorkspace + '\\' + city_c + '_' + back_dict[key] + '.shp'
#print inFeatures
updateFeatures = updateWorkspace + '\\' + city + '_' + back_dict[key] + '_' + VERSION + '.shp'
#print updateFeatures
outFeatureClass = os.path.join(outWorkspace ,VERSION + '_' + city + '_' + back_dict[key] + '_SYMDIFF.shp')
#print outFeatureClass
clusterTolerance = ".0001 Meters"
# Execute SymDiff 注意差分輸入和更新數據必須座標一致!
try:
arcpy.SymDiff_analysis(inFeatures, updateFeatures, outFeatureClass, "ALL", clusterTolerance)
#cnt += 1
num_ok += 1
print(city + ' ' + back_dict[key] + ' success!')
except:
print(city + ' ' + back_dict[key] + ' fail! Please Confirm!')
num_fail += 1
## if cnt == 2:
## num_ok += 1
print(u'All done! {0} symdiff success! {1} symdiff fail! Please Confirm!'.format(num_ok,num_fail))