arcpy將多個dbf合併到excel中

  • 使用arcpy將多個dbf文件根據提供的字段提取相應的值並保存到txt中,然後再保存到excel,沒有某個字段的dbf將設置默認值nodata

  • 測試數據列表
    在這裏插入圖片描述

  • 結果示例
    在這裏插入圖片描述

  • 在excel中打開txt並設置逗號分隔即可
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

  • 源代碼

# -*- coding:utf-8 -*-
import arcpy
import os
import sys
import copy
# in order to support Chinese language
reload(sys)
sys.setdefaultencoding('utf8')

#Set parameters below
dbfDir = u"D:\\china2017\\china2017\\shp"    #dbf folder path
fields = ['FID','PAC','NAME','GB','TYPE']    #fields your interested in
outtxt = r"D:\fvc\boua.txt"    #output result
nodata = "Null"  #invalid data value


f = open(outtxt,'w')
dbfs = [i for i in os.listdir(dbfDir) if i.endswith(".dbf")]
f.write("DBF_NAME," + ",".join(fields)+"\n")
for dbf in dbfs:
    fc = os.path.join(dbfDir,dbf)
    # fields that actual exists
    existsFields = [fi.name for fi in arcpy.ListFields(fc)]
    actualFields = [fi for fi in fields if fi in existsFields]
    newContents = [fi in existsFields for fi in fields]
    for i in range(len(newContents)):
        if newContents[i] == False:
            newContents[i] = nodata

    
    print(dbf)
    with arcpy.da.SearchCursor(fc,actualFields) as cursor:
        for row in cursor:
            newContents2 = copy.deepcopy(newContents)
            contents = [str(i) for i in row]
            for ele in contents:
                for j in range(len(newContents2)):
                    if newContents2[j] == True:
                        newContents2[j] = ele
                        break
         
            line = dbf[:-4] + "," + ",".join(newContents2) + "\n"
            f.write(line)
f.close()
發佈了75 篇原創文章 · 獲贊 83 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章