arcpy批量合并对应gdb名称的要素,使用Append_management方法

37 篇文章 3 订阅
28 篇文章 1 订阅
该Python脚本通过arcpy库遍历指定文件夹下的所有.GDB数据库,将它们的要素数据集合并到一个新的GDB中。首先,它列出所有.GDB路径并创建目标汇总数据库。然后,对于每个GDB,它检查其包含的要素数据集和要素类,如果汇总数据库中不存在同名数据,就将它们追加或复制到汇总数据库中。
摘要由CSDN通过智能技术生成

arcpy批量合并对应gdb名称的要素,使用Append_management方法。

import os #加载os库
import arcpy #加载arcpy库

gdblist=[] #新建空白列表 
file_dir=r"E:\001yang\DLG_M" #输入待合并GDB数据库所在的文件夹的路径
dirlist=os.listdir(file_dir) #获取 D:\\Desktop 下一层级目录的路径
for dir in dirlist: #循环dirlist列表
    if ".gdb" in dir: #如果路径名称中包含 .gdb 字符串
        gdblist.append(file_dir+"\\"+dir) #将待合并GDB数据库的路径添加到gdblist列表中
print(gdblist)
print("gdb的个数是:" +str(len(gdblist)))

outpath=r"E:\001yang\test\result" #合并后汇总数据库所在的文件夹
outgdbname="zong" #合并后汇总数据库的名称
allgdb=outpath+"\\"+outgdbname+".gdb" #汇总数据库的完整路径
if arcpy.Exists(allgdb): #判断是否已存在将新建的汇总数据库
    pass
else:
    arcpy.CreateFileGDB_management(outpath,outgdbname) #建立汇总数据库

datasetResult =''

for gdb in gdblist: #循环待合并GDB数据库
    print(gdb) #打印循环到的某个数据库的路径
    arcpy.env.workspace = gdb #将循环到的数据库作为工作空间
    datasets = arcpy.ListDatasets() #列出该数据库包含的要素数据集
    
    if(len(datasets)!=0):
        for ds in datasets: #循环要素数据集
            print("    " + ds)  # 打印该要素数据集的名称
            if arcpy.Exists(allgdb+"\\"+ds): #判断汇总数据库中是否已存在同名要素数据集
                pass
            else: #如果不存在该要素数据集
                datasetResult = ds
                desc = arcpy.Describe(ds) #获取该要素数据集的描述
                sr = desc.spatialReference #获取该要素数据集的空间参考
                arcpy.CreateFeatureDataset_management(allgdb,ds,sr)  #在汇总数据库中创建同名的要素数据集,并且空间参考与待合并数据库中的要素数据集保持一致


            fcs=arcpy.ListFeatureClasses(feature_dataset=ds) #获取该要素数据集下的所有要素类
            for fc in fcs: #循环该要素数据集下的所有要素类
                print("        " + fc)  # 打印要素类名称便于查看进度
                if arcpy.Exists(allgdb+"\\"+ds + "\\" + fc): #如果汇总数据库下已存在该名称的要素类
                    arcpy.Append_management(gdb + "\\" + ds + "\\" + fc,
                                            allgdb + "\\" + ds + "\\" + fc,
                                            "NO_TEST","","") #将该要素类追加到汇总数据库下同名的要素类中
                else: #如果汇总数据库下不存在该名称的要素类
                    arcpy.FeatureClassToFeatureClass_conversion(fc,allgdb+"\\"+ds,fc) #复制该要素类至汇总数据库下的要素数据集中
    else:           
        fcs=arcpy.ListFeatureClasses() #获取该要素数据集下的所有要素类
        for fc in fcs: #循环该要素数据集下的所有要素类
            print("        " + fc)  # 打印要素类名称便于查看进度
            if arcpy.Exists(allgdb+"\\"+datasetResult + "\\" + fc): #如果汇总数据库下已存在该名称的要素类
                arcpy.Append_management(gdb + "\\" + fc,
                                        allgdb + "\\" + datasetResult + "\\" + fc,
                                        "NO_TEST") #将该要素类追加到汇总数据库下同名的要素类中
            else: #如果汇总数据库下不存在该名称的要素类
                arcpy.FeatureClassToFeatureClass_conversion(fc,allgdb+"\\"+datasetResult,fc) #复制该要素类至汇总数据库下的要素数据集中



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木易GIS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值