ArcGIS arcpy代码工具——定制属性表字段输出表格

系列文章目录

ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改
ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片
ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板



功能说明

日常工作中,常常要对要素的属性表进行导出表格操作,一般有多余字段还需要手动删除。
本文使用arcpy代码对属性表定制字段并输出表格。
本代码目标为:

  • 1 选定准备输出的要素属性表的字段,名称及类型等格式
  • 2 定制输出表格
  • 3 导出表格dbf
  • 4 存入mdb数据库

1 准备工作

本文样例要素的属性表如下图:
1
红框选中的字段是准备保留的字段,其他多余的字段可以在导出表格后删除该列。

2

此外,还可以 先行关闭多余字段,再导出表格,则导出的表格只保留未关闭的字段列。

3

2 代码分段

(1) 设置工作空间和目录

设置数据的目录,要素可以是shape层,可以放在工作空间目录内,否则需要绝对路径。

// 设置工作空间
arcpy.env.workspace = "d:/mulu"
// 定义输入要素类  shape层
input_fc = "JCTB.shp"  # shape图层,放在 工作空间文件夹内,否则绝对路径目录

也可以是要素集中的图层。

// 设置工作空间
arcpy.env.workspace = "d:/mulu"
// 定义输入要素类 
input_fc = r"D:\test.mdb\data\JCTB"  

(2) 定义导出表格

arcgis Desktop 使用的表格格式为 .dbf,定义导出表格名称,可以存在工作空间目录内,或者绝对路径其他位置。

//导出表格名称
output_table = "table.dbf"

(3) 筛选字段

定义表格中需要保留的字段名称,注意 :此处应 为 要素属性表中 存在的字段名称。

//定义要素类的字段列表,筛选需要的字段
fields = ["BSM", "JCBH", "XMC", "JCMJ", "XZB", "YZB"]

(4) 创建表格

使用 arcpy.CreateTable_management()方法创建 导出表格。
注意 :此时创建的表格是空表格,但是由于arcgis Desktop 的 特性
“要素类”和“表”还必须至少具有一个字段,此时的 导出表格 有唯一默认字段 “Field1”,字段下无数据,此时还不能删除,待后续创建其他字段后,才能删除此多余字段。

//创建空的 输出表格
arcpy.CreateTable_management(arcpy.env.workspace, output_table)

(5) 给导出表格添加字段

根据筛选的字段,按照属性表的字段类型,定义字段到 导出表格。
注意 :定义的格式需要保持一致,否则 属性表 数据无法写入 导出表格 。

//定义字段
arcpy.AddField_management(output_table, "BSM", "LONG")
arcpy.AddField_management(output_table, "JCBH", "TEXT")
arcpy.AddField_management(output_table, "XMC", "TEXT")
arcpy.AddField_management(output_table, "JCMJ", "DOUBLE")
arcpy.AddField_management(output_table, "XZB", "DOUBLE")
arcpy.AddField_management(output_table, "YZB", "DOUBLE")

(6) 删除首个默认字段

上一步给导出表格添加了其他字段,此时可以删除 默认字段 “Field1” ,表格仍然存在至少一个字段。

//删除 默认 多余字段
arcpy.DeleteField_management(output_table, "Field1")

(7) 读取属性表字段内容,写入导出表格

通过游标 ,逐行读取要素属性表,按照筛选的字段 ,将数据写入 导出表格 对应字段列。

//读取数据 写入表格
with arcpy.da.SearchCursor(input_fc, fields) as cursor:
    for row in cursor:       
        # 将要素字段值 信息写入输出表格中
        with arcpy.da.InsertCursor(output_table, fields) as icursor:
            icursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5]))

这个过程中,可以对 某个字段进行计算,赋值,将修改后的数据写入对应 列。如下:

//读取数据 计算字段 写入表格
with arcpy.da.SearchCursor(input_fc, fields) as cursor:
    for row in cursor:       
       # 计算字段 例如 面积换算公顷
        change_info = round(row[3] / 10000, 4)

        # 将要素字段值 信息写入输出表格中
        with arcpy.da.InsertCursor(output_table, fields) as icursor:
            icursor.insertRow((row[0], row[1], row[2], change_info, row[4], row[5]))

(8) 存入mdb数据库

上一步执行之后,导出表格 “table.dbf” 工作已经完成了,格式可以另存为 .xls等格式。
4

偶尔,导出表格需要保存为mdb格式,如下代码实现:

//将表格导出到Access数据库中
access_database = r"D:\mulu\other.mdb"
arcpy.TableToTable_conversion(output_table, access_database, "output_table")

在这里插入图片描述

3 完整代码

# coding=utf-8
import arcpy

# 设置工作空间
arcpy.env.workspace = "d:/mulu"
input_fc = r"D:\test.mdb\data\JCTB"  # 数据库图层 指定目录位置
output_table = "table.dbf"

# 定义要素类的字段列表,筛选需要的字段
fields = ["BSM", "JCBH", "XMC", "JCMJ", "XZB", "YZB"]

# 创建空的 输出表格
arcpy.CreateTable_management(arcpy.env.workspace, output_table)

arcpy.AddField_management(output_table, "BSM", "LONG")
arcpy.AddField_management(output_table, "JCBH", "TEXT")
arcpy.AddField_management(output_table, "XMC", "TEXT")
arcpy.AddField_management(output_table, "JCMJ", "DOUBLE", field_precision=15, field_scale=4)
arcpy.AddField_management(output_table, "XZB", "DOUBLE", field_precision=15, field_scale=3)
arcpy.AddField_management(output_table, "YZB", "DOUBLE", field_precision=15, field_scale=3)

arcpy.DeleteField_management(output_table, "Field1")

# 打开游标,遍历要素类中的每个要素
with arcpy.da.SearchCursor(input_fc, fields) as cursor:
    for row in cursor:
        # 计算字段 例如 面积换算公顷
        change_info = round(row[3] / 10000, 4)

        # 将要素字段值 信息写入输出表格中
        with arcpy.da.InsertCursor(output_table, fields) as icursor:
            icursor.insertRow((row[0], row[1], row[2], change_info, row[4], row[5]))

# 将表格导出到Access数据库中
access_database = r"D:\mulu\other.mdb"
arcpy.TableToTable_conversion(output_table, access_database, "output_table")

4 后记

日常工作中导出属性表的操作比较频繁,操作也比较简单,只是处理多余字段较繁琐,偶尔几次完全可以手动操作,但是经常性的重复操作就可以使用arcpy代码实现。本文简单的介绍了用arcpy导出属性表的方法,可以在过程中增加内容,实现更为复杂的字段计算赋值等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

da-peng-song

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

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

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

打赏作者

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

抵扣说明:

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

余额充值