4.1 ListDatasets (数据集列表)
#coding=utf8 import arcpy import os import sys import math from arcpy.sa import * def Main(): mypath=inWorkspace arcpy.env.workspace =mypath datasets =arcpy.ListDatasets() #arcpy.ListDatasets("", "Feature") for dataset in datasets: arcpy.AddMessage(dataset) arcpy.AddMessage(u"含路径:"+mypath+os.sep+dataset) inWorkspace=arcpy.GetParameterAsText(0) Main()
4.2 ListFeatureClasses(要素类)
#coding=utf8 import arcpy import os import sys import math from arcpy.sa import * def Main1(): mypath=inWorkspace arcpy.env.workspace =mypath #==============参数的类型必须必须是字符串========================== pList=[] featureclasses = arcpy.ListFeatureClasses() for fc in featureclasses: pList.append(mypath+os.sep+fc) datasets = arcpy.ListDatasets("", "Feature") for dataset in datasets: curpath=mypath+os.sep+dataset #arcpy.env.workspace =curpath fclasses = arcpy.ListFeatureClasses(feature_dataset=dataset) for fc in fclasses: pList.append(curpath+os.sep+fc) ##arcpy.AddMessage(fc) for fc in pList: arcpy.AddMessage(fc) inWorkspace=arcpy.GetParameterAsText(0) Main1()
4.3 ListTables(表)
#coding=utf8 import arcpy import os import sys import math from arcpy.sa import * def Main(): mypath=inWorkspace arcpy.env.workspace =mypath tables = arcpy.ListTables() for table in tables: arcpy.AddMessage(table) arcpy.AddMessage(u"目录:"+mypath+"\"+table) arcpy.AddMessage(u"目录:{}\{}".format(mypath,table)) inWorkspace=arcpy.GetParameterAsText(0) Main()
4.4 ListRasters(栅格)
#coding=utf8 import arcpy import os import sys import math from arcpy.sa import * def Main(): mypath=inWorkspace arcpy.env.workspace =mypath #==============参数的类型必须必须是字符串========================== rasters = arcpy.ListRasters() for raster in rasters: arcpy.AddMessage("raster:"+raster) #inWorkspace=arcpy.GetParameter(0) inWorkspace=arcpy.GetParameterAsText(0) Main()
4.5 ListWorkspaces(工作空间)和批量紧缩数据库
#coding=utf8 import arcpy import os import sys import math from arcpy.sa import * def BatchRepair(gdb): arcpy.env.workspace =gdb featureclasses = arcpy.ListFeatureClasses() for fc in featureclasses: arcpy.AddMessage(u"修复:"+gdb+os.sep+fc) arcpy.RepairGeometry_management(fc) datasets = arcpy.ListDatasets("", "Feature") for dataset in datasets: curpath=gdb+os.sep+dataset arcpy.env.workspace =curpath fclasses = arcpy.ListFeatureClasses() for fc in fclasses: arcpy.AddMessage(u"修复:"+curpath+os.sep+fc) arcpy.RepairGeometry_management(fc) def BathCompact(indir): arcpy.env.workspace = indir workspaces = arcpy.ListWorkspaces("*", "FileGDB") for workspace in workspaces: arcpy.AddMessage(u"紧缩数据库:"+workspace) arcpy.Compact_management(workspace) BatchRepair(workspace) workspaces = arcpy.ListWorkspaces("*", "Access") for workspace in workspaces: arcpy.AddMessage(u"紧缩数据库:"+workspace) arcpy.Compact_management(workspace) BatchRepair(workspace) workspaces = arcpy.ListWorkspaces("*", "Folder") for workspace in workspaces: arcpy.AddMessage(u"Folder:"+workspace) BathCompact(workspace) def Main(): arcpy.env.workspace = indir workspaces = arcpy.ListWorkspaces() for workspace in workspaces: arcpy.AddMessage("workspace:"+workspace) indir=arcpy.GetParameterAsText(0) Main() BathCompact(indir)
4.7 数据库相互转换
#coding=utf8 import arcpy import os import sys import math from arcpy.sa import * def Main(): arcpy.env.workspace = inworkspace datasets =arcpy.ListDatasets() #arcpy.ListDatasets("", "Feature") for dataset in datasets: arcpy.AddMessage(dataset) arcpy.Copy_management(dataset, outworkspace+os.sep+dataset) Features =arcpy.ListFeatureClasses() for Feature in Features: arcpy.AddMessage(Feature) arcpy.Copy_management(Feature, outworkspace+os.sep+Feature) Tables =arcpy.ListTables() for Table in Tables: arcpy.AddMessage(Table) arcpy.Copy_management(Table, outworkspace+os.sep+Table) inworkspace=arcpy.GetParameterAsText(0) outworkspace=arcpy.GetParameterAsText(1) version=arcpy.GetParameterAsText(2) outpath,outgdb=os.path.split(outworkspace) if not arcpy.Exists(outworkspace): if (outgdb.upper().endswith(".GDB")): arcpy.CreateFileGDB_management(outpath, outgdb,version) else: arcpy.CreatePersonalGDB_management(outpath, outgdb,version) Main()
4.8 一个文件夹下MDB转GDB
#coding=utf8 import arcpy import os import sys import math from arcpy.sa import * def mdb2gdb(inworkspace,outworkspace): #arcpy.AddMessage("outworkspace======"+outworkspace) outpath,outgdb=os.path.split(outworkspace) #arcpy.AddMessage("outpath======"+outpath) #arcpy.AddMessage("outgdb======"+outgdb) if not os.path.exists(outpath): #os.mkdir(outpath) #创建文件夹 os.makedirs(outpath) #多层创建目录 if not arcpy.Exists(outworkspace): arcpy.CreateFileGDB_management(outpath, outgdb) arcpy.env.workspace = inworkspace datasets =arcpy.ListDatasets() #arcpy.ListDatasets("", "Feature") for dataset in datasets: arcpy.AddMessage(dataset) arcpy.Copy_management(dataset, outworkspace+os.sep+dataset) Features =arcpy.ListFeatureClasses() for Feature in Features: arcpy.AddMessage(Feature) arcpy.Copy_management(Feature, outworkspace+os.sep+Feature) Tables =arcpy.ListTables() for Table in Tables: arcpy.AddMessage(Table) arcpy.Copy_management(Table, outworkspace+os.sep+Table) def Main(indir): arcpy.env.workspace = indir workspaces = arcpy.ListWorkspaces("*", "Access") for workspace in workspaces: outworkspace=workspace.replace(oldindir,outdir).lower().replace(".mdb",".gdb") arcpy.AddMessage(u"indir:"+oldindir+",outdir:"+outdir) arcpy.AddMessage(u"拷贝:"+workspace+",输出:"+outworkspace) mdb2gdb(workspace,outworkspace) #arcpy.Compact_management(workspace) #BatchRepair(workspace) arcpy.env.workspace = indir #路径变了,必须重新设置 workspaces = arcpy.ListWorkspaces("*", "Folder") for workspace in workspaces: arcpy.AddMessage(u"Folder====:"+workspace) Main(workspace) indir=arcpy.GetParameterAsText(0) oldindir=indir outdir=arcpy.GetParameterAsText(1) if not os.path.exists(outdir): #os.mkdir(outpath) #创建文件夹 os.makedirs(outdir) #多层创建目录 Main(indir)
4.9 更新数据库BSM
#coding=utf8 import arcpy from arcpy import env import os import sys import time import ylpy def getidx(List,mystr): try: idx=List.index(mystr) return idx except Exception as e: # 都能处理异常 return -1 def updatebsm(fc,fieldname,k): arcpy.AddMessage("update:"+fc+","+fieldname+",start="+str(k)) cursor =arcpy.UpdateCursor(fc) for row in cursor: row.setValue(fieldname, k) cursor.updateRow(row) k=k+1 if cursor: del cursor return k def updatebsmda(fc,fieldname,k): arcpy.AddMessage("update:"+fc+","+fieldname+",start="+str(k)) with arcpy.da.UpdateCursor(fc, (fieldname)) as cursor: for row in cursor: row[0] =k cursor.updateRow(row) k=k+1 return k def updpdateFc(myworkspace,k): arcpy.env.workspace = myworkspace arcpy.AddMessage("myworkspace:"+myworkspace) featureclasses = arcpy.ListFeatureClasses() if featureclasses==None: return k arcpy.AddMessage("=====:"+str(len(featureclasses))) for fc in featureclasses: if not ylpy.FieldExists(fc,fieldname): arcpy.AddField_management(fc,fieldname ,"LONG") k=updatebsm(fc,fieldname,k) return k myworkspace= arcpy.GetParameterAsText(0) fieldname= arcpy.GetParameterAsText(1) k= arcpy.GetParameter(2) arcpy.env.workspace = myworkspace k=updpdateFc(myworkspace,k) arcpy.env.workspace = myworkspace datasets = arcpy.ListDatasets("", "Feature") for dataset in datasets: arcpy.AddMessage("dataset:"+dataset) k=updpdateFc(myworkspace+os.sep+dataset,k) arcpy.env.workspace = myworkspace tables = arcpy.ListTables() for table in tables: if not ylpy.FieldExists(table,fieldname): arcpy.AddField_management(table,fieldname ,"LONG") k=updatebsm(table,fieldname,k)
4.10.1 获得工具箱工具
#coding=utf8 import arcpy import os import sys workspace=arcpy.GetParameterAsText(0) #输入工具箱 toolname = [] #for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,datatype="FeatureClass",type="Polygon"): mdatatype=['Tool'] for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,datatype=mdatatype): arcpy.AddMessage(u"dirpath=="+dirpath) ## for mypath in dirpath: ## arcpy.AddMessage("mypath=="+mypath) for dirname in dirnames: arcpy.AddMessage(u"dirname=="+dirname) for filename in filenames: toolname.append(os.path.join(dirpath, filename)) num=len(toolname) for i in range(0,num): arcpy.AddMessage(u"i={0},name={1}".format(i,toolname[i]))
4.10.2 获得一个数据库所有要素类
#coding=utf8 import arcpy import os import sys workspace=arcpy.GetParameterAsText(0) #输入数据库 feature_classes = [] #for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,datatype="FeatureClass",type="Polygon"): mdatatype=['Table', 'FeatureClass'] for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,datatype=mdatatype): arcpy.AddMessage("dirpath=="+dirpath) ## for mypath in dirpath: ## arcpy.AddMessage("mypath=="+mypath) for dirname in dirnames: arcpy.AddMessage("dirname=="+dirname) for filename in filenames: feature_classes.append(os.path.join(dirpath, filename)) num=len(feature_classes) for i in range(0,num): arcpy.AddMessage("i={0},name={1}".format(i,feature_classes[i]))