-
使用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()