任务描述:
我有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:breakshp_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!
后记:
写博客的初衷是分享经验,同时是算是自己对思路和代码的整理,方便日后处理数据,应该可以帮到很多人。
我已免费分享我的心得,如果看官还有其他问题的,那么:知识付费,我的时间和经验正好可以解决你的问题。
咨询问题请添加QQ:819369354
2022年4月20日