将不同目录下Shape文件批量导入不同的PersonalGDB数据库

网友小包留言提问,说能不能将一个目录下不同子文件夹内的Shape文件分别导入到与子文件夹同名的personalGDB数据库中,借助Python,这个功能很容易就可以实现。

下面是程序的源代码,欢迎大家批评指正,共同学习。

import sys,os,os.path,string,arcgisscripting
gp = arcgisscripting.create(9.3)
INPUT_fOLDER_PATH = gp.GetParameterAsText(0)
OUTPUT_FOLDER_PATH = gp.GetParameterAsText(1)
gp.Workspace = INPUT_fOLDER_PATH
LISTS = os.listdir(gp.Workspace)
try:
    gp.AddMessage(">>===============BEGIN=================")
    for LIST1 in LISTS:
        LIST_ElEMENT = INPUT_fOLDER_PATH + os.sep + LIST1
        if os.path.isdir(LIST_ElEMENT):
            SUB_FOLDER = LIST_ElEMENT
            gp.Workspace = SUB_FOLDER
            gp.AddMessage("  > WorkSpace: " + gp.Workspace)
            gp.CreatePersonalGDB_management(OUTPUT_FOLDER_PATH,\
            os.path.basename(SUB_FOLDER))
            gp.AddMessage("   > Personal GeoDatabase " + "\"" + \
            os.path.basename(SUB_FOLDER) + ".mdb" + "\"" + \
            " Create Successful!!!")
            PERSONAL_GDB = OUTPUT_FOLDER_PATH + os.sep + \
            os.path.basename(SUB_FOLDER) + ".mdb"
            FCS = gp.ListFeatureClasses()
            COUNT = len(FCS)
            if COUNT > 0:
                for FC in FCS:
                    OUT_FC = PERSONAL_GDB + os.sep + FC[:-4]
                    gp.CopyFeatures_management(FC,OUT_FC)
                    gp.AddMessage("    > " + "\"" + FC + "\"" + \
                    " Copy to " + \
                    os.path.basename(PERSONAL_GDB) + " Successful!!!")
            else:
                gp.AddError("    > Folder " + "\"" + \
                SUB_FOLDER + "\""  + " is Empyt!")
    gp.Addmessage(">>================END==================")
except:
    gp.Getmessage(2)

该工具在使用时,需要注意以下几点。

(1)输入文件夹和输出文件夹一定不能相同。

(2)将忽略输入文件夹根目录下的shape文件,只考虑输入文件夹中子文件夹下的shape文件。

(3)输出的文件夹要为空文件夹,因为本程序没有加入检查是否存在重名文件的功能。

(4)建立的PersonalGDB数据库名称同输入文件夹中子文件夹的名称相同。

(5)如果文件夹为空,同样会建立一个与其同名的数据库,这是为了与原来的结构目录保持一致。

(6)本工具在执行结束后会有一条报错,但是不影响程序的正常执行。对于错误笔者也没有找出原因,大家可以根据源代码进行改进,欢迎交流。

大家可以移步本站的下载区去下载该工具。

2 comments

  1. 作为初学者,就按闻道先后尊称你一声老师吧,哈哈。我跟“小包”网友的问题是一样的,一个目录下有很多子目录,这些子目录中有shp文件,就是想根据子目录名称创建同名数据库,并将该子目录下所有shp导入到数据库中,我现在的ArcGIS版本为10.5,你的这段代码我没有测试成功,期盼你的指导。
    网友:小菜。

发表评论

电子邮件地址不会被公开。 必填项已用*标注