『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS+Python读取flt文件并进行区域统计

ArcGIS+Python读取flt文件并进行区域统计
功能描述:通过ARCGIS的Python脚本,读取flt文件格式,然后根据一个shape文件的区域进行统计其平均值,最后读取出来保存到txt文件中。
       1、由于统计后生成的为dbf文件,所以读取需要一个包,下载dbfpy-2.3.0.win32.exe,专门读取写dbf文件的包。
       2、读取.flt的Python代码
       # -*- coding: cp936 -*-
       # Import system modules
       import arcpy
       import os
       from arcpy import env
       from arcpy.sa import *
       from dbfpy import dbf
       #函数体:把链表中的内容写到指定的txt文件中
       def WriteResultToTxt(txtpath,list):  
           #print "写出结果"
           #print Result_ET_List
           #print txtpath
           f = open(txtpath, 'w')
           for record in list:
               #print record    
               f.write(record+"\n")
           f.close()
       #函数体:读取指定dbf文件的平均值
       def ReadDBF(dbfPath):
           #打开统计的结果表,读取平均值
           #print dbfPath+"李艳忠"
           if (os.path.exists(dbfPath)):
               #print "文件存在!"
               db = dbf.Dbf(dbfPath, True)
               for record in db:
                   averageValue=record['MEAN']
                   return averageValue
                   #print "平均值为:"+str(averageValue)
           else:
               print "查无此文件!"
               return
       #主程序
       env.workspace = "F:\项目工程\科研数据\Zhang_E"                                         # 设置环境变量
       rawDataPath=env.workspace+"\\Raster"
       inZoneData = env.workspace+"\\border\\border.shp"                                                     #用于统计的边界shape
       zoneField = "FID"                                                              #边界使用统计字段
       outTablePath = "D:\\study\\aa\\result\\"                              #D:\study\aa\result                                 #MonthlyET_1983Apr.dbf
       outResultTXT=env.workspace+"\\result\\ET.txt"                                  #导出的txt路径
       Result_ET_List=[]                                                             #用于存储计算出来的ET结果的链表
       #print outTablePath
       #print inZoneData
       #print outResultTXT
       #构建所有的文件名称路径
       monthArr=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']  #定义12个月
       for year in range(1983,2007,1): 
           for month in monthArr:
               infilename="MonthlyET_"+str(year)+str(month)
               inFileFullpath=rawDataPath+"\\"+infilename+".flt"
               #print inFileFullpath
               if (os.path.exists(inFileFullpath)):                                        #输入文件存在,进行处理
                   #print str(infilefullpath)+"----存在"            
                   outTableFullPath=str(outTablePath)+infilename+".dbf"                            #输出文件路径
                   # Check out the ArcGIS Spatial Analyst extension license
                   arcpy.CheckOutExtension("Spatial")                                    #一定要加上这句话,否则会报“The tool is not licensed.”的错误
                   #outZSaT = ZonalStatisticsAsTable(inZoneData,zoneField,inFileFullpath,outTableFullPath, "NODATA", "MEAN")  #区域统计到表中
                   #print "输出的dbf路径为:"+outTableFullPath
                   average=ReadDBF(outTableFullPath)                                         #读取dbf中的结果值
                  #print average
                   Result_ET_List.append(infilename+"     "+str(average))                      #把当前的结果存到链表中      
                  print infilename+"----已完成!"            
               else:
                   #print str(filefullpath)+"----不存在"
                   aa=2
            print "正准备写出结果链表!记录数为:"+str(len(Result_ET_List))
       WriteResultToTxt(outResultTXT,Result_ET_List)                      #最后把结果写出到txt文件中
       print str(len(Result_ET_List))+"条记录成功写出结果链表!"
       print "恭喜您,全部文件成功完成!"

      京ICP备2025132830号-1 京公网安备 号