python存儲CSV二維數據——利用arcpy進行要素差分量統計

  •  綠地、水系差分量統計

輸入文件名中英文不一致——字典

#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)


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章