- 綠地、水系差分量統計
輸入文件名中英文不一致——字典
#coding = UTF-8
city_names={#配合arcpy包使用python2.7,注意語法
u'三亞':'SANYA',
u'東莞':'DONGGUAN',
u'中山':'ZHONGSHAN',
u'烏魯木齊':'WULUMUQI',
u'佛山':'FOSHAN',
u'保定':'BAODING',
u'蘭州':'LANZHOU',
u'南京':'NANJING',
u'南寧':'NANNING',
u'南昌':'NANCHANG',
u'南通':'NANTONG',
u'廈門':'XIAMEN',
u'台州':'TAIZHOU',
u'合肥':'HEFEI',
u'呼和浩特':'HUHEHAOTE',
u'哈爾濱':'HAERBIN',
u'唐山':'TANGSHAN',
u'大連':'DALIAN',
u'天津':'TIANJIN',
u'太原':'TAIYUAN',
u'寧波':'NINGBO',
u'常州':'CHANGZHOU',
u'徐州':'XUZHOU',
u'惠州':'HUIZHOU',
u'成都':'CHENGDU',
u'揚州':'YANGZHOU',
u'無錫':'WUXI',
u'昆明':'KUNMING',
u'杭州':'HANGZHOU',
u'柳州':'LIUZHOU',
u'武漢':'WUHAN',
u'泉州':'QUANZHOU',
u'濟南':'JINAN',
u'海口':'HAIKOU',
u'溫州':'WENZHOU',
u'濰坊':'WEIFANG',
u'煙臺':'YANTAI',
u'珠海':'ZHUHAI',
u'鹽城':'YANCHENG',
u'石家莊':'SHIJIAZHUANG',
u'福州':'FUZHOU',
u'秦皇島':'QINHUANGDAO',
u'紹興':'SHAOXING',
u'蕪湖':'WUHU',
u'蘇州':'SUZHOU',
u'西寧':'XINING',
u'西安':'XIAN',
u'貴陽':'GUIYANG',
u'鄭州':'ZHENGZHOU',
u'重慶':'CHONGQING',
u'金華':'JINHUA',
u'銀川':'YINCHUAN',
u'長春':'CHANGCHUN',
u'長沙':'CHANGSHA',
u'青島':'QINGDAO',
u'瀋陽':'SHENYANG',
u'廣州':'GUANGZHOU',
u'上海':'SHANGHAI',
u'深圳':'SHENZHEN',
u'北京':'BEIJING',
u'香港':'XIANGGANG',
u'澳門':'AOMEN'
}
city_dict2 = dict(zip(city_names.values(), city_names.keys()))
##print(city_names.keys())
##print(list(city_names.keys()))
# coding=utf-8
#要素差分量統計
import arcpy
from City_Dictionary_u import city_names,city_dict2#中英,英中
f = open('count.csv','w')
title = ['CITY','GREENURBAN_SymDiff','WATER_SymDiff']
f.write(','.join(title)+'\n')
#統計差分量——由於字典不是序列類型,統計順序隨機
num = 0
ls = []
for city_k,city_v in city_names.items(): #key:city
#arcpy.GetCount_management()計算差分量
print city_v+u' is counting...'
shpfile_GREENURBAN = 'D:/19Q2G2_DATA/BACK/19Q2_RESULT/19Q2'+city_k+u'綠地差分量.shp'
shpfile_WATER = 'D:/19Q2G2_DATA/BACK/19Q2_RESULT/19Q2'+city_k+u'水系差分量.shp'
result_GREENURBAN = arcpy.GetCount_management(shpfile_GREENURBAN)
result_WATER = arcpy.GetCount_management(shpfile_WATER)
count_GREENURBAN = int(result_GREENURBAN.getOutput(0))
count_WATER = int(result_WATER.getOutput(0))
#差分量計入ls,ls的60個元素是:[城市名,綠地差分量,水系差分量]——3元素列表
ls.append([city_v,str(count_GREENURBAN),str(count_WATER)])
##ls = ls.append()錯誤:
##append會修改ls本身,並且返回None。不能把返回值再賦值給ls。
##count_GREENURBAN需要轉成字符串——str(),否則會報錯:
##f.write(','.join(row)+'\n') #TypeError: sequence item 0: expected string, list found
##TypeError: sequence item 1: expected string or Unicode, int found
#寫入csv
for row in ls:
#print(row) row=[city_v,city_v,city_v]
#str.join(seq),seq期望是序列類型數據:字符串或列表
f.write(','.join(row)+'\n') #TypeError: sequence item 0: expected string, list found
print '{} recorded!'.format(row[0])
num += 1
print '{} cities successed!'.format(num)
輸入文件名統一英文後:
# coding=utf-8
import arcpy
from City_Dictionary_u import city_dict2#全部城市60個,不包括香港、澳門 City_Dictionary
f = open('count.csv','w')
title = ['CITY','GREENURBAN_SymDiff','WATER_SymDiff']#統計結果cxv文件表頭
f.write(','.join(title)+'\n')
city_e_seq_ls =['BEIJING', 'SHANGHAI', 'GUANGZHOU', 'SHENZHEN', 'SHENYANG', 'NANJING',\
'HANGZHOU', 'TIANJIN', 'CHENGDU', 'XIAN', 'SUZHOU', 'ZHENGZHOU', 'WUHAN',\
'DALIAN', 'WUXI', 'NINGBO', 'HK', 'CHANGCHUN', 'CHANGSHA', 'WENZHOU',\
'JINAN', 'TAIYUAN', 'HEFEI', 'DONGGUAN', 'XIAMEN', 'HAERBIN', 'KUNMING',\
'CHONGQING', 'QINGDAO', 'TANGSHAN', 'FOSHAN', 'FUZHOU', 'MC', 'MCZH', 'NANNING',\
'HUHEHAOTE', 'LANZHOU', 'YANGZHOU', 'SHIJIAZHUANG', 'QUANZHOU', 'YANTAI',\
'NANCHANG', 'WULUMUQI', 'GUIYANG', 'BAODING', 'HAIKOU', 'SHAOXING', 'TAIZHOU',\
'SANYA', 'LIUZHOU', 'QINHUANGDAO', 'XINING', 'ZHUHAI', 'WEIFANG', 'XUZHOU',\
'YANCHENG', 'NANTONG', 'JINHUA','CHANGZHOU', 'HUIZHOU', 'ZHONGSHAN', 'YINCHUAN', 'WUHU']
#統計差分量——由於字典不是序列類型,統計順序隨機
num = 0
ls = []
#for city_k,city_v in city_names.items(): #key:city
for city in city_e_seq_ls:
#arcpy.GetCount_management()計算差分量
print city+u' is counting...'
shpfile_GREENURBAN = r'D:\20Q2M2\DATA\20Q2M2G2\20Q2M2_BACK_SYMDIFF\\20Q2M2'+city_dict2.get(city,"null")+u'綠地差分量.shp'
try:
result_GREENURBAN = arcpy.GetCount_management(shpfile_GREENURBAN)
count_GREENURBAN = str(int(result_GREENURBAN.getOutput(0)))
except:
count_GREENURBAN = "null"
shpfile_WATER = r'D:\20Q2M2\DATA\20Q2M2G2\20Q2M2_BACK_SYMDIFF\\20Q2M2'+city_dict2.get(city,"null")+u'水系差分量.shp'
try:
result_WATER = arcpy.GetCount_management(shpfile_WATER)
count_WATER = str(int(result_WATER.getOutput(0)))
except:
count_WATER = "null"
#差分量計入ls,ls的60個元素是:[城市名,綠地差分量,水系差分量]——3元素列表
ls.append([city,count_GREENURBAN,count_WATER])
#寫入csv
for row in ls:
f.write(','.join(row)+'\n') #2
print '{} recorded!'.format(row[0])
num += 1
f.close()
print '{} cities successed!'.format(num)
- POI4種量統計
#coding=utf-8
import arcpy
import os
#city_e_seq_ls:與《預處理變化量統計表》順序匹配的英文城市名列表 63-香港-澳門-珠澳/珠海
#統計差分量——由於字典不是序列類型,統計順序隨機,這裏使用列表
city_e_seq_ls =['BEIJING', 'SHANGHAI', 'GUANGZHOU', 'SHENZHEN', 'SHENYANG', 'NANJING',\
'HANGZHOU', 'TIANJIN', 'CHENGDU', 'XIAN', 'SUZHOU', 'ZHENGZHOU', 'WUHAN',\
'DALIAN', 'WUXI', 'NINGBO', 'HK', 'CHANGCHUN', 'CHANGSHA', 'WENZHOU',\
'JINAN', 'TAIYUAN', 'HEFEI', 'DONGGUAN', 'XIAMEN', 'HAERBIN', 'KUNMING',\
'CHONGQING', 'QINGDAO', 'TANGSHAN', 'FOSHAN', 'FUZHOU', 'MC', 'MCZH', 'NANNING',\
'HUHEHAOTE', 'LANZHOU', 'YANGZHOU', 'SHIJIAZHUANG', 'QUANZHOU', 'YANTAI',\
'NANCHANG', 'WULUMUQI', 'GUIYANG', 'BAODING', 'HAIKOU', 'SHAOXING', 'TAIZHOU',\
'SANYA', 'LIUZHOU', 'QINHUANGDAO', 'XINING', 'ZHUHAI', 'WEIFANG', 'XUZHOU',\
'YANCHENG', 'NANTONG', 'JINHUA','CHANGZHOU', 'HUIZHOU', 'ZHONGSHAN', 'YINCHUAN', 'WUHU']
f = open('count_POI.csv','w')
title = ['CITY','POI','POI_ADD','POI_DEL','POI_INVARI']#需與dirs列表元素順序一致
f.write(','.join(title)+'\n')
ls = []#存放63個元素(城市名及對應的4種統計值的列表)的列表
#拼出POI——4種需要統計的數據路徑
root = r'D:\20Q2\00DATA\BACK\POI\POI_4'#根目錄,含中文加u
paths = os.listdir(root)
print paths
dirs = []#POI4種路徑的列表
for path in paths:
dirs.append(os.path.join(root,path))
print dirs #打印出統計順序並檢查與title是否一致
for city_e in city_e_seq_ls:
print city_e+' is counting...'
ls_4 = []
for i in dirs:
#arcpy.GetCount_management()獲取shp屬性錶行數
shpfile_POI =i+ '/' + city_e + '_OUTLINE_IX_POI.shp'
try:
result_POI = arcpy.GetCount_management(shpfile_POI)
count_POI = str(int(result_POI.getOutput(0)))
except:
count_POI ='null'
#把每個城市的4種統計數據存入列表ls_4
ls_4.append(count_POI)
#每個城市的【英文名與4種統計數據ls_4】作爲元素,存入ls
ls.append([city_e]+ls_4)
#ls_4.clear()
#寫入csv
num = 0
for row in ls:
#print(row) row=['CITY','POI','POI_ADD','POI_DEL','POI_INVARI']
#str.join(seq),seq期望是序列類型數據:字符串或列表
f.write(','.join(row)+'\n') #TypeError: sequence item 0: expected string, list found
print '{} recorded!'.format(row[0])
num += 1
f.close()
print '{} cities successed!'.format(num)