如何遍历多个File GDB及其要素类并为每个要素类添加字段?
问题分析与修正脚本
原脚本核心问题是未正确遍历主项目GDB下的子File GDB,也未针对每个子GDB获取要素类,具体问题点:
- 直接在主workspace调用
ListDatasets(),得到的是主GDB内部的数据集,不是你创建的3个子File GDB - 提前调用
ListFeatureClasses(),只会读取主workspace的要素类,无法遍历每个子GDB内的内容 Compact函数应作用于File GDB本身,而非数据集
修正后的脚本如下:
import arcpy import os # 替换为你的主项目GDB路径 main_gdb_path = "C:/你的主项目GDB路径" arcpy.env.workspace = main_gdb_path # 列出主GDB下所有子File GDB child_gdbs = arcpy.ListWorkspaces("*", "FileGDB") for gdb in child_gdbs: # 压缩当前子File GDB arcpy.management.Compact(gdb) # 切换工作空间到当前子GDB arcpy.env.workspace = gdb # 收集当前子GDB下所有点要素类(包括根目录和数据集内的) feature_classes = arcpy.ListFeatureClasses(feature_type="Point") datasets = arcpy.ListDatasets() for ds in datasets: fc_in_ds = arcpy.ListFeatureClasses(feature_type="Point", dataset=ds) feature_classes.extend(fc_in_ds) # 为每个要素类添加字段(先检查字段是否存在,避免报错) for fc in feature_classes: existing_fields = [f.name for f in arcpy.ListFields(fc)] if "FACILITYID" not in existing_fields: arcpy.management.AddField(fc, "FACILITYID", "TEXT", field_length=20, field_alias="Facility Identifier", field_is_nullable="NON_NULLABLE") if "INTID" not in existing_fields: arcpy.management.AddField(fc, "INTID", "LONG", field_alias="Integer ID", field_is_nullable="NULLABLE") if "LASTUPDATE" not in existing_fields: arcpy.management.AddField(fc, "LASTUPDATE", "DATE", field_alias="Last Update Date", field_is_nullable="NULLABLE") if "LASTEDITOR" not in existing_fields: arcpy.management.AddField(fc, "LASTEDITOR", "TEXT", field_length=20, field_alias="Last Editor", field_is_nullable="NULLABLE") if "NOTES" not in existing_fields: arcpy.management.AddField(fc, "NOTES", "TEXT", field_alias="Notes", field_is_nullable="NULLABLE") if "ENTERPRISEID" not in existing_fields: arcpy.management.AddField(fc, "ENTERPRISEID", "TEXT", field_length=20, field_alias="Enterprise ID", field_is_nullable="NULLABLE") # 切回主GDB工作空间,继续遍历下一个子GDB arcpy.env.workspace = main_gdb_path
额外说明:
- 加入字段存在性检查,避免重复添加字段引发错误
- 同时处理GDB根目录和数据集内的点要素类,覆盖所有存储场景
- 处理完子GDB后切回主GDB工作空间,确保后续遍历正常
内容的提问来源于stack exchange,提问作者Amy
相关产品推荐
相关产品推荐

