ArcPy批量将栅格文件的属性表导出为Excel表格的方法

  本文介绍基于Python中的ArcPy模块,批量导出多个栅格数据属性表,并将结果保存为Excel表格的方法。

  首先,我们来明确一下本文的需求。现在在一个文件夹内,有多个.tif格式的栅格数据。其中,每一个栅格数据都有一张属性表,如下图所示。

  我们现在希望,对于文件夹下的每一个栅格文件,都将其对应的属性表导出到本地,并保存为Excel表格。

  明确了需求,即可开始撰写代码。本文所用代码如下。

# -*- coding: utf-8 -*-

import arcpy
import os
ws = r'E:/06_Extra/202503_SC/TIFF'
outPath = r'E:/06_Extra/202503_SC/Re/'
outExt = ".csv"
arcpy.env.workspace = ws
rasters = arcpy.ListRasters("*")
for raster in rasters:
    rasloc = os.path.join(ws, raster)
    print(rasloc)
    fields = '*'
    flds = arcpy.ListFields(rasloc)
    header = ','.join([fld.name for fld in flds])
    if len(flds) != 0:
        outCSV = os.path.join(outPath, '{0}{1}'.format(raster, outExt))
        with open(outCSV,'w') as f:
            header += ',RasterName\n'
            f.write(header)
            curs = arcpy.SearchCursor(rasloc)
            for row in curs:
                lst = [row.getValue(fld.name) for fld in flds]
                lst.append(raster)
                line = ','.join(str(a) for a in lst)
                f.write(line + '\n')
del row, curs

  上述代码的含义也很简单。

  首先,arcpy.env.workspace用以设置工作空间路径,也就是栅格文件的存储路径,用于读取栅格文件;outPath定义输出.csv格式文件的路径。

  随后,arcpy.ListRasters("\*")用以获取工作空间内所有栅格文件的列表,这里的"\*"表示匹配所有文件名。获取得到文件后,通过for raster in rasters遍历每个栅格文件,并拼接完整路径rasloc

  接下来,arcpy.ListFields(rasloc)获取当前栅格文件的字段列表(即属性表的列名),并将字段名用逗号连接为字符串header;额外添加RasterName列,用于记录原始栅格文件名。

  随后,arcpy.SearchCursor用以遍历栅格属性表的每一行数据,逐行读取字段值。将每行的字段值转换为字符串列表lst,并追加当前栅格文件名raster,最后拼接为.csv格式的行数据写入文件。

  执行上述代码,即可在结果路径中,看到每一个栅格文件属性表的导出结果文件——每一个栅格文件对应一个.csv格式文件,.csv格式文件的名称就是原本栅格文件的名称。如下图所示。

  我们就以本文最开头那张图所示的属性表为例,来查看一下其所对应.csv格式文件。如下图所示,可以看到其就是原本属性表中的内容,且最后多加了一列,也就是原本栅格文件的名称。

  至此,大功告成。

欢迎关注:疯狂学习GIS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂学习GIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值