麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

在ArcGIS中使用ArcPy导出GDB数据库要素类字段信息

近期在做一个数据处理项目时,写总结报告需要把GDB库体的数据库结构给写进去,本着 “偷懒” 的原则,花时间写了个ArcPy脚本,几分钟就搞定了(主要用到了arcpy库和xlwt库),在这里记录一下。

效果预览

导出表格如下图所示,清晰罗列了字段名称、别名、类型、长度等信息。

实现代码

将输入GDB文件路径和输出EXCEL表格的路径修改之后,就可以正常运行了。输出的字段可以根据自己的需求进行优化调整。

# -*- coding: utf-8 -*-
import os
import sys
import time
from datetime import datetime
import arcpy
import xlwt

reload(sys)
sys.setdefaultencoding("utf-8")

def makedirs_file(input_path):
    """
    检查文件夹是否存在,否则创建文件夹
    @param input_path: 文件或文件夹名称
    @return:
    """
    if os.path.isdir(input_path):
        if os.path.exists(input_path) is False:
            os.makedirs(input_path)
    else:
        input_path = os.path.dirname(input_path)
        if os.path.exists(input_path) is False:
            os.makedirs(input_path)


if __name__ == '__main__':
    # 设置文件路径和工作区间
    path_gdb = r'F:\gisData\慈溪变更数据\基础数据\地类图斑.gdb'
    # 输出表格的路径,注意: 表格的名称最好不要包含中文,否则可能会报错
    time_str = str(datetime.now().strftime("%Y%m%d%H%M"))
    excelpath = './results/field-info{}.xls'.format(time_str)
    # 创建输出文件夹
    makedirs_file(excelpath)
    if not arcpy.Exists(path_gdb):
        raise IOError(u"错误,未发现GDB数据库文件!")
    arcpy.env.workspace = path_gdb
    # 程序运行开始时间
    startTime = time.time()
    # 创建Excel
    xls = xlwt.Workbook(encoding='utf-8')
    # 设置工作表的名称
    sht1 = xls.add_sheet(u'字段信息表')

    fieldList = [u'序号', u'字段序号', u'要素类名称', u'字段名称', u'别称', u'字段类型', u'字段长度', u'要素类型',
                 u'要素路径', u'坐标系']
    for column in range(len(fieldList)):
        sht1.write(0, column, fieldList[column])
    fcs = arcpy.ListFeatureClasses()
    if len(fcs) < 1:
        raise IOError(u"错误,未发现矢量文件!")
    row = 0
    for featureClass in fcs:
        print ("current deal ---->" + featureClass)
        fieldList = arcpy.ListFields(dataset=featureClass)

        fieldLen = len(fieldList)
        for index in range(fieldLen):
            field = fieldList[index]
            # 字段名称
            field_name = field.name
            # 无效名称字段
            list_field_filter = ['Shape', 'SHAPE','OBJECTID', 'OBJECTID_1','OBJECTID_2', 'Shape_Length', 'Shape_Area', '']
            if field_name in list_field_filter:
                continue
            # 要素路径
            featureclasspath = os.path.join(path_gdb, featureClass)
            # 序号
            row += 1
            sht1.write(row, 0, row)
            # 字段序号
            sht1.write(row, 1, "字段{}".format(index + 1))
            # 要素名称
            sht1.write(row, 2, featureClass.encode('utf-8'))
            # 字段名称
            sht1.write(row, 3, field_name)
            # 字段别称
            sht1.write(row, 4, field.aliasName)
            # 字段类型
            sht1.write(row, 5, field.type)
            # 字段长度
            sht1.write(row, 6, field.length)
            # 要素几何类型
            sht1.write(row, 7, arcpy.Describe(featureclasspath).shapetype)
            # 要素路径
            sht1.write(row, 8, str(featureclasspath.encode('utf-8')))
            # 坐标系
            sht1.write(row, 9, arcpy.Describe(featureclasspath).spatialReference.name)
    try:
        print(u'开始保存到Excel中...')
        xls.save(excelpath)
        print(u'程序运行结束,字段信息已经保存Excel中:' + excelpath)
    except Exception, arg:
        raise ValueError("错误,导出失败:"+arg.message)
    # end
    endTime = time.time()
    print ("The program run time is : %.02f seconds" % (endTime - startTime))

相关阅读

麻辣GIS-fungis

作者:

一个努力搬砖的GISer

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)