任务描述: 我有3年内某站点的逐日降雨数据,shp文件的属性表中包含经纬度和降雨量数据(就是下图右边的Lat、Lon、RASTEBRALU),想把他们全部提取到一个TXT中 在网上找了好久能读取点元素文件属性的代码,眼花缭乱,最后终于找到个能用的: python/arcpy提取shp文件属性表中的字段值 我的代码是在他的基础上完成的,主要加了批量操作,感谢这位博主!
#-*- coding:utf-8 -*-
'''
这篇代码是用于批量读取点元素的属性值
'''
#导入模块,使用该模块里定义的类、方法或者变量,从而达到代码复用的目的
import arcpy #导入 ArcPy 之后,可以运行随 ArcGIS 安装的标准工具箱中的所有地理处理工具
from arcpy import env
import os #os--操作系统接口模块,该模块提供了一些方便使用操作系统相关功能的函数
#设置文件路径和工作区间
path_file="F:\\Data of China Flash Flood\\pointvalue_test\\"
env.workspace="F:\\Data of China Flash Flood\\pointvalue_test\\"
#读取路径中所有文件
ls = os.listdir(path_file)
#存储结果文件
OutputFile = open(path_file+'Result.txt', 'w')
#文件文件后缀名判定,只对SHP文件进行处理
for i in ls:
if os.path.splitext(i)[1] == ".shp": #os.path.splitext函数用于分离文件名与扩展名
shppath = ("F:\\Data of China Flash Flood\\pointvalue_test\\"+i)
#提取shp文件中的'FID', 'POINT_X', 'POINT_Y'字段
shpfields = ['Lat', 'Lon', 'RASTERVALU']
shp_Lat = []
shp_Lon = []
shp_RASTERVALU = []
#使用SearchCursor(搜索指针)遍历Row对象并提取字段值
shprows = arcpy.SearchCursor(shppath, shpfields)
#使用WHILE进行迭代搜索游标,通过游标的next返回下一行
#当属性表中有多行时,这种遍历很关键,但对于点元素其实不用遍历也行
while True:
shprow = shprows.next()
if not shprow:
break
shp_Lat.append(shprow.Lat) #append()方法用于在列表末尾添加新的对象
shp_Lon.append(shprow.Lon)
shp_RASTERVALU.append(shprow.RASTERVALU)
OutputFile.write(str(shp_RASTERVALU) +'\n') #将shp_RASTERVALU写入txt文件中,并换行
print shp_RASTERVALU
关于SearchCursor,请看:SearchCursor Finish!
|