You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用os.walk实现arcpy脚本批量处理文件夹内所有地理数据库

批量处理文件夹内所有地理数据库的解决方案

优化后的脚本

import arcpy
import os

def process_gdb(gdb_path, output_file):
    """处理单个地理数据库,提取要素类、表格、栅格等信息并写入输出文件"""
    arcpy.env.workspace = gdb_path

    # 处理根目录下的要素类
    fcs = arcpy.ListFeatureClasses()
    for fc in fcs:
        fc_path = os.path.join(gdb_path, fc)
        desc = arcpy.Describe(fc_path)
        output_file.write(f"{gdb_path},NA,{desc.dataType},{fc},{desc.shapeType}\n")
    
    # 处理要素数据集内的要素类
    fds = arcpy.ListDatasets("", "Feature")
    for fd in fds:
        fds_path = os.path.join(gdb_path, fd)
        arcpy.env.workspace = fds_path
        fcs_in_fd = arcpy.ListFeatureClasses()
        for fc in fcs_in_fd:
            fc_path = os.path.join(fds_path, fc)
            desc = arcpy.Describe(fc_path)
            output_file.write(f"{gdb_path},{fd},{desc.dataType},{fc},{desc.shapeType}\n")
    # 重置工作空间回当前GDB,避免影响后续操作
    arcpy.env.workspace = gdb_path

    # 处理表格
    tables = arcpy.ListTables()
    for table in tables:
        table_path = os.path.join(gdb_path, table)
        desc = arcpy.Describe(table_path)
        output_file.write(f"{gdb_path},NA,{desc.dataType},{table},\n")

    # 处理栅格
    rasters = arcpy.ListRasters("","")
    for raster in rasters:
        raster_path = os.path.join(gdb_path, raster)
        desc = arcpy.Describe(raster_path)
        output_file.write(f"{gdb_path},NA,{desc.dataType},{raster},{desc.format}\n")

if __name__ == "__main__":
    # 替换为你要批量处理的根文件夹路径
    root_folder = r"\\hanford\data\sitedata\LTS_GIS\HGIS\Data"
    # 替换为你的输出文本文件路径
    output_text_path = r"\\hanford\data\sitedata\LTS_GIS\HGIS\Data\test2.txt"

    # 打开输出文件,全程追加写入
    with open(output_text_path, "a") as output_file:
        # 遍历根文件夹下所有子目录
        for root, dirs, files in os.walk(root_folder):
            # 筛选出地理数据库(以.gdb结尾的目录)
            for dir_name in dirs:
                if dir_name.endswith(".gdb"):
                    gdb_full_path = os.path.join(root, dir_name)
                    print(f"正在处理: {gdb_full_path}")
                    process_gdb(gdb_full_path, output_file)

关键说明

  • 批量遍历逻辑:通过os.walk遍历目标文件夹的所有子目录,筛选出.gdb结尾的目录(地理数据库本质是特殊结构的文件夹)
  • 代码复用:将单个GDB的处理逻辑封装为process_gdb函数,避免原脚本中重复的代码块,提升可维护性
  • 文件操作优化:使用with语句管理输出文件,全程只打开一次,自动处理关闭,比原脚本多次打开/关闭更高效且安全
  • 缩进修正:修复了原脚本中for循环代码块缺少缩进的语法错误
  • 工作空间重置:处理完要素数据集后重置工作空间,避免后续表格、栅格的读取出现错误

内容的提问来源于stack exchange,提问作者Chase Freeman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:24:56