python 入门教程

来源:互联网 发布:能耗模拟软件 编辑:程序博客网 时间:2024/05/24 15:40
转自:http://blog.sina.com.cn/s/blog_86a2baab0101aszf.html
1 Python入门1.1 字符串操作1.1.1 复制字符串#strcpy(sStr1,sStr2)sStr1 = 'strcpy'sStr2 = sStr1sStr1 = 'strcpy2'print sStr21.1.2 连接字符串#strcat(sStr1,sStr2)sStr1 = 'strcat'sStr2 = 'append'sStr1 += sStr2print sStr11.1.3 查找字符#strchr(sStr1,sStr2)sStr1 = 'strchr'sStr2 = 'r'nPos = sStr1.index(sStr2)print nPos1.1.4 比较字符串#strcmp(sStr1,sStr2)sStr1 = 'strchr'sStr2 = 'strch'print cmp(sStr1,sStr2)1.1.5 扫描字符串是否包含指定的字符#strspn(sStr1,sStr2)sStr1 = '12345678'sStr2 = '456'#sStr1 and chars both in sStr1 and sStr2print len(sStr1 and sStr2)1.1.6 字符串长度#strlen(sStr1)sStr1 = 'strlen'print len(sStr1)1.1.7 将字符串中的小写字符转换为大写字符#strlwr(sStr1)sStr1 = 'JCstrlwr'sStr1 = sStr1.upper()print sStr11.1.8 追加指定长度的字符串#strncat(sStr1,sStr2,n)sStr1 = '12345'sStr2 = 'abcdef'n = 3sStr1 += sStr2[0:n]print sStr11.1.9 字符串指定长度比较#strncmp(sStr1,sStr2,n)sStr1 = '12345'sStr2 = '123bc'n = 3print cmp(sStr1[0:n],sStr2[0:n])1.1.10 复制指定长度的字符#strncpy(sStr1,sStr2,n)sStr1 = ''sStr2 = '12345'n = 3sStr1 = sStr2[0:n]print sStr11.1.11 字符串比较,不区分大小写#stricmp(sStr1,sStr2)sStr1 = 'abcefg'sStr2 = 'ABCEFG'print cmp(sStr1.upper(),sStr2.upper())1.1.12 将字符串前n个字符替换为指定的字符#strnset(sStr1,ch,n)sStr1 = '12345'ch = 'r'n = 3sStr1 = n * ch + sStr1[3:]print sStr11.1.13 扫描字符串#strpbrk(sStr1,sStr2)sStr1 = 'cekjgdklab'sStr2 = 'gka'nPos = -1for c in sStr1:if c in sStr2:nPos = sStr1.index(c)breakprint nPos1.1.14 翻转字符串#strrev(sStr1)sStr1 = 'abcdefg'sStr1 = sStr1[::-1]print sStr11.1.15 找字符串python strstr#strstr(sStr1,sStr2)sStr1 = 'abcdefg'sStr2 = 'cde'print sStr1.find(sStr2)1.1.16 分割字符串#strtok(sStr1,sStr2)sStr1 = 'ab,cde,fgh,ijk'sStr2 = ','sStr1 = sStr1[sStr1.find(sStr2) + 1:]print sStr1 1.2 语法1.2.1 Python 变量类型Python是有变量类型的,而且会强制检查变量类型。内置的变量类型有如下几种:#整型integer_number = 90 #浮点float_number = 90.4 #复数complex_number = 10 + 10j #list 序列sample_list = [1,2,3,'abc'] #dictionary 字典sample_dic = {"key":value, 2:3} #tuple 只读的序列sample_tuple = (1,3,"ab")1.2.2 Python 程序流程控制1.2.2.1 条件判断结构flag1 = some_valueflag2 = other_valueif flag1:do_function_1()elif flag2:do_function_2()else:do_function_3()1.2.2.2 循环结构for i in range(0, 10):print(i) for i in ['a','b','c','dd','eee'];print(i) 1.2.3 Python 列表(list)操作1.2.3.1 创建列表sample_list = ['a',1,('a','b')]1.2.3.2 Python 列表操作sample_list = ['a','b',0,1,3]1.2.3.3 得到列表中的某一个值value_start = sample_list[0]end_value = sample_list[-1]1.2.3.4 删除列表的第一个值del sample_list[0]1.2.3.5 在列表中插入一个值sample_list[0:0] = ['sample value']1.2.3.6 得到列表的长度list_length = len(sample_list)1.2.3.7 列表遍历for element in sample_list:print(element)1.2.3.8 Python 列表高级操作/技巧l  产生一个数值递增列表num_inc_list = range(30)#will return a list [0,1,2,...,29]l  用某个固定值初始化列表initial_value = 0list_length = 5sample_list = [ initial_value for i in range(10)]sample_list = [initial_value]*list_length# sample_list ==[0,0,0,0,0]2 Python在ArcGIS常用语句2.1 属性选择temp_layer="temp_layer"gp.MakeFeatureLayer_management(XZQJXName, temp_layer)gp.SelectLayerByAttribute_management(temp_layer, "NEW_SELECTION", "JXLX is null")num=gp.getcount(temp_layer)if num>0:gp.AddMessage("返回:"+str(num))return2.2 是否存在if gp.exists(DLJX_buffer):2.3 图层条件另存gp.Select_analysis(layername,DLJX2,"") #备份layername是原始数据中间的备份后表名,最后是条件2.4 擦除Erasegp.Erase_analysis(newtablename, temp_layer, DLJX, "")2.5 面转线 gp.PolygonToLine_management(DLTB, DLTB_PolygonToLine)2.6 缓冲区gp.Buffer_analysis(XZDW, XZDW_Buffer, ".5 Meters", "FULL", "ROUND", "NONE", "")2.7 删除数据gp.Delete_management(DLTB_PolygonToLine, "FeatureClass") #删除临时数据2.8 追加数据gp.Append_management(DLTB_Select, outlayername, "TEST", "", "")后面outlayername是目标图层前面是要追加的数据3 Python在ArcGIS中应用3.1 获得字段位置def getfieldidx(TableName,fieldname): #获得字段位置desc = gp.Describe(TableName)fields = desc.Fieldsfield=fields.next()i=-1;while field:# Check the field name, perform a calculation when finding the field 'Flag'#if field.Name.upper() == fieldname.upper():gp.AddMessage("======:"+fieldname)return ifield=fields.next()i=i+1return -13.2 UpdateCursor和setvalue使用例子def UpdateAngle(dgx):desc = gp.Describe(dgx)shapefieldname = desc.ShapeFieldNameangleidx=getfieldidx(dgx,"Angle")gp.AddMessage("正在处理======angleidx:"+str(angleidx)) rows = gp.UpdateCursor(dgx,"Angle>90 and Angle<270")row = rows.Next()p=0while row:angle = row.GetValue("Angle")angle=angle+180if angle>=360:angle=angle-360row.SetValue("Angle",angle);rows.UpdateRow(row)gp.AddMessage("正在处理======angle:"+str(p)+":"+str(angle))p=p+1row = rows.Next()3.3 更新线的长度到字段代码:# ---------------------------------------------------------------------------# 1.py# Created on: 周二 五月 11 2010 12:24:15 下午#   (generated by ArcGIS/ModelBuilder)# --------------------------------------------------------------------------- # Import system modulesimport sys, string, os, arcgisscripting # Create the Geoprocessor objectgp = arcgisscripting.create() inFeatureclass  = gp.GetParameterAsText(0)inField  = gp.GetParameterAsText(1)rows = gp.UpdateCursor(inFeatureclass)row = rows.Next() # Calculate the total length of all roads#length = 0try:while row:# Create the geometry object#feat = row.shapelength = length + feat.Lengthrow.SetValue(inField,feat.Length)rows.UpdateRow(row)row = rows.Next()# Print the total length of all roads#gp.AddMessage("总线的长度:"+str(length))except Exception, ErrorDesc:gp.AddError(str(ErrorDesc))参数设置 有输出表可以 model调用# ---------------------------------------------------------------------------# 1.py# Created on: 周二 五月 11 2010 12:24:15 下午#   (generated by ArcGIS/ModelBuilder)# --------------------------------------------------------------------------- # Import system modulesimport sys, string, os, arcgisscripting # Create the Geoprocessor objectgp = arcgisscripting.create() inFeatureclass  = gp.GetParameterAsText(0) #原始数据inField  = gp.GetParameterAsText(1)outFeatureclass  = gp.GetParameterAsText(2) #输出数据gp.CopyFeatures(inFeatureclass,outFeatureclass)  rows = gp.UpdateCursor(outFeatureclass)row = rows.Next() # Calculate the total length of all roads#length = 0try:while row:# Create the geometry object#feat = row.shapelength = length + feat.Lengthrow.SetValue(inField,feat.Length)rows.UpdateRow(row)row = rows.Next()# Print the total length of all roads#gp.AddMessage("总线的长度:"+str(length))except Exception, ErrorDesc:gp.AddError(str(ErrorDesc))  3.4 批量给一个Workspace中表加字段# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 1 <输入workspace或gdb># --------------------------------------------------------------------------- # Import system modulesimport sys, string, os, arcgisscripting # Create the Geoprocessor objectgp = arcgisscripting.create() inworkspace = gp.GetParameterAsText(0)  gp.Workspace = inworkspacefcs = gp.ListFeatureClasses()fc = fcs.Next()while fc:try:# Process: 增加id字段...gp.AddField_management(fc, "id", "LONG", "", "", "", "序号", "NULLABLE", "NON_REQUIRED", "") # Process: 增加名称...gp.AddField_management(fc, "name", "TEXT", "", "", "16", "名称", "NULLABLE", "NON_REQUIRED", "")gp.AddMessage("fc="+fc+",加字段已完成"); except Exception, ErrorDesc:#If an error set output boolean parameter "Error" to True.gp.AddError(str(ErrorDesc))print "Failed to convert %s\\%s\n%s" % (fc, gp.GetMessages(2)) # Proceed to the next feature classfc = fcs.Next() 3.5 获得一个Workspace中FeatureDataset---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 1 <输入图层># --------------------------------------------------------------------------- # Import system modulesimport sys, string, os, arcgisscripting # Create the Geoprocessor objectgp = arcgisscripting.create() inworkspace = gp.GetParameterAsText(0)  gp.Workspace = inworkspacepItems = gp.ListDatasets()pItem = pItems.Next()while pItem:gp.AddMessage("pItem="+pItem);pItem = pItems.Next()3.6 矢量批量切割按图幅、行政区划# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 矢量图批量切割, by 闫磊 4个参数# 原始数据 是图层,可以多选# 切割工具是是接幅表 或则行政# 字段是输出mdb名称# 输出路径# ---------------------------------------------------------------------------# Create Geoprocessing Objectimport arcgisscripting, sys, os, stringgp = arcgisscripting.create()gp.overwriteoutput = 1inworkspace  = gp.GetParameterAsText(0)gp.AddMessage("1="+inworkspace)clipshp  = gp.GetParameterAsText(1)gp.AddMessage("2=clipshp"+clipshp)fieldname= gp.GetParameterAsText(2)gp.AddMessage("3=fieldname"+fieldname)outworkspace  = gp.GetParameterAsText(3)gp.AddMessage("4="+outworkspace)mdbbool  = gp.GetParameterAsText(4)gp.AddMessage("5="+mdbbool) desc = gp.Describe(clipshp)filepath=desc.CatalogPathp=filepath.find(".mdb")  fields = desc.Fieldsftype="String"field=fields.next()while field:# Check the field name, perform a calculation when finding the field 'Flag'#if field.Name == fieldname:# Set the value for the field and exit loop#ftype=field.Typebreakfield=fields.next()jfb_Select="c:\\yl.shp" #不能c:\要c:\\或则c:/ rows = gp.searchcursor(clipshp)#gp.AddMessage("5=执行到这里")row = rows.next()#gp.AddMessage("6=执行到这里")while row:#gp.AddMessage("7=执行到这里")fieldvalue =""+ row.GetValue(fieldname)#gp.AddMessage("fieldvalue="+fieldvalue)if p>0: #mdbExpression="["+fieldname +"]="else:Expression="""+fieldname +""="#gp.AddMessage("Expression1="+Expression)if ftype=="String":Expression=Expression+"'"+fieldvalue+"'"else:Expression=Expression+fieldvalue #gp.AddMessage("Expression2="+Expression)gp.Select_analysis(clipshp, jfb_Select,Expression)#gp.AddMessage("6=clipshp"+clipshp)out_mdb=""#gp.AddMessage("======================================================out_mdb"+out_mdb)if mdbbool=="True":out_mdb=outworkspace + "\"+fieldvalue+".mdb"  #os.path.basename(dataset)else:out_mdb=outworkspace + "\"+fieldvalue+".gdb"gp.AddMessage("3=out_mdb"+out_mdb)if not gp.Exists(out_mdb):if mdbbool=="True":gp.CreatePersonalGDB(os.path.dirname(out_mdb),os.path.basename(out_mdb))else:gp.CreateFileGDB(os.path.dirname(out_mdb),os.path.basename(out_mdb))#gp.AddMessage("88888888888888888888888888888888888888")mydatasets= string.split(inworkspace,";") for dataset in mydatasets: try:gp.AddMessage("正在切割="+dataset+":为"+out_mdb+"\"+ os.path.basename(dataset))gp.Clip_analysis(dataset, jfb_Select,out_mdb+"\"+ os.path.basename(dataset), ".001 Meters")except Exception, ErrorDesc:#If an error set output boolean parameter "Error" to True.gp.AddError(str(ErrorDesc))row = rows.next()if gp.exists(jfb_Select):gp.Delete_management(jfb_Select)           运行界面 输出mdb,切割使用shp# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 矢量图批量切割, by 闫磊 4个参数# 原始数据 是图层,可以多选# 切割工具是是接幅表 或则行政# 字段是输出mdb名称# 输出路径# ---------------------------------------------------------------------------# Create Geoprocessing Objectimport arcgisscripting, sys, os, stringgp = arcgisscripting.create()gp.overwriteoutput = 1inworkspace  = gp.GetParameterAsText(0)gp.AddMessage("1="+inworkspace)clipshp  = gp.GetParameterAsText(1)gp.AddMessage("2=clipshp"+clipshp)fieldname= gp.GetParameterAsText(2)gp.AddMessage("3=fieldname"+fieldname)outworkspace  = gp.GetParameterAsText(3)gp.AddMessage("4="+outworkspace)rows = gp.searchcursor(clipshp)gp.AddMessage("5=执行到这里")row = rows.next()jfb_Select="e:\\yl.shp" #不能c:\要c:\\或则c:/gp.AddMessage("6=执行到这里")while row:gp.AddMessage("7=执行到这里")fieldvalue ="" + row.GetValue(fieldname)gp.AddMessage("fieldvalue="+fieldvalue)Expression="""+fieldname +"" like '"+fieldvalue+"'"gp.AddMessage("Expression="+Expression)gp.Select_analysis(clipshp, jfb_Select,Expression)gp.AddMessage("6=clipshp"+clipshp)out_mdb=outworkspace + "\"+fieldvalue+".mdb"  #os.path.basename(dataset)  p=out_mdb.find(".")out_mdb=out_mdb[0:p]+".mdb"gp.AddMessage("3="+out_mdb) if not gp.Exists(out_mdb):gp.CreatePersonalGDB(os.path.dirname(out_mdb),os.path.basename(out_mdb))try:indatasets = string.split(inworkspace , ";") for dataset in indatasets:gp.AddMessage("正在切割="+dataset+":为"+out_mdb+"\"+ os.path.basename(dataset))gp.Clip_analysis(dataset, jfb_Select,out_mdb+"\"+ os.path.basename(dataset), ".001 Meters") except Exception, ErrorDesc:#If an error set output boolean parameter "Error" to True.gp.AddError(str(ErrorDesc))row = rows.next()    3.7 影像切割# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 影像批量切割, by 闫磊 4个参数# 原始影像数据# 切割工具是是接幅表 或则行政# 字段是输出gdb名称# 输出路径# ---------------------------------------------------------------------------# Create Geoprocessing Objectimport arcgisscripting, sys, os, string,typesgp = arcgisscripting.create(9.3)gp.overwriteoutput = 1oldraster  = gp.GetParameterAsText(0)gp.AddMessage("1oldraster="+oldraster)clipshp  = gp.GetParameterAsText(1)gp.AddMessage("2clipshp="+clipshp)fieldname= gp.GetParameterAsText(2)gp.AddMessage("3fieldname="+fieldname)outworkspace  = gp.GetParameterAsText(3)gp.AddMessage("4="+outworkspace) desc = gp.Describe(clipshp)filepath=desc.CatalogPathp=filepath.find(".mdb")  fields = desc.Fieldsftype="String"for field in fields:# Check the field name, perform a calculation when finding the field 'Flag'#if field.Name == fieldname:# Set the value for the field and exit loop#ftype=field.Typebreak rows = gp.searchcursor(clipshp)row = rows.next()jfb_Select=outworkspace+"\\temp.shp" #不能c:\要c:\\或则c:/#gp.CheckOutExtension("spatial") while row:try: value=str(row.GetValue(fieldname))fieldvalue = valueif p>0: #mdbExpression="["+fieldname +"]="else:Expression="""+fieldname +""="if ftype=="String":Expression=Expression+"'"+fieldvalue+"'"else:Expression=Expression+fieldvalue gp.AddMessage("Expression="+Expression+",jfb_Select="+jfb_Select+",clipshp="+clipshp)gp.Select_analysis(clipshp, jfb_Select, Expression) out_raster =outworkspace+"/"+fieldvalue+".img"gp.ExtractByMask_sa(oldraster, jfb_Select, out_raster)except Exception, ErrorDesc:#If an error set output boolean parameter "Error" to True.gp.AddError(str(ErrorDesc)) row = rows.next() if gp.exists(jfb_Select):gp.Delete_management(jfb_Select)参数设置:  界面: 最终代码,考虑了数字和字符串# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 影像批量切割, by 闫磊 4个参数# 原始影像数据# 切割工具是是接幅表 或则行政# 字段是输出gdb名称# 输出路径# ---------------------------------------------------------------------------# Create Geoprocessing Objectimport arcgisscripting, sys, os, string,typesgp = arcgisscripting.create(9.3)gp.overwriteoutput = 1oldraster  = gp.GetParameterAsText(0)gp.AddMessage("1oldraster="+oldraster)clipshp  = gp.GetParameterAsText(1)gp.AddMessage("2clipshp="+clipshp)fieldname= gp.GetParameterAsText(2)gp.AddMessage("3fieldname="+fieldname)outworkspace  = gp.GetParameterAsText(3)gp.AddMessage("4="+outworkspace) desc = gp.Describe(clipshp) fields = desc.Fieldsftype="String"for field in fields:# Check the field name, perform a calculation when finding the field 'Flag'#if field.Name == fieldname:# Set the value for the field and exit loop#ftype=field.Typebreak rows = gp.searchcursor(clipshp)row = rows.next()jfb_Select=outworkspace+"\\temp.shp" #不能c:\要c:\\或则c:/#gp.CheckOutExtension("spatial") while row:try: value=str(row.GetValue(fieldname))fieldvalue = valueif ftype=="String":Expression="""+fieldname +""='"+fieldvalue+"'"else:Expression="""+fieldname +""="+fieldvalue gp.AddMessage("Expression="+Expression+",jfb_Select="+jfb_Select+",clipshp="+clipshp)gp.Select_analysis(clipshp, jfb_Select, Expression) out_raster =outworkspace+"/"+fieldvalue+".img"gp.ExtractByMask_sa(oldraster, jfb_Select, out_raster)except Exception, ErrorDesc:#If an error set output boolean parameter "Error" to True.gp.AddError(str(ErrorDesc)) row = rows.next() if gp.exists(jfb_Select):gp.Delete_management(jfb_Select)3.8 影像切割另一种方法代码,要先打开数据# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 影像批量切割, by 闫磊 4个参数# 原始影像数据  不要临时导出数据,要打开数据# 切割工具是是接幅表 或则行政# 字段是输出gdb名称# 输出路径# ---------------------------------------------------------------------------# Create Geoprocessing Objectimport arcgisscripting, sys, os, string,typesgp = arcgisscripting.create(9.3)gp.overwriteoutput = 1oldraster  = gp.GetParameterAsText(0)gp.AddMessage("1oldraster="+oldraster)clipshp  = gp.GetParameterAsText(1)gp.AddMessage("2clipshp="+clipshp)fieldname= gp.GetParameterAsText(2)gp.AddMessage("3fieldname="+fieldname)outworkspace  = gp.GetParameterAsText(3)gp.AddMessage("4="+outworkspace) desc = gp.Describe(clipshp) fields = desc.Fieldsftype="String"for field in fields:# Check the field name, perform a calculation when finding the field 'Flag'#if field.Name == fieldname:# Set the value for the field and exit loop#ftype=field.Typebreak  rows = gp.searchcursor(clipshp)row = rows.next() #gp.CheckOutExtension("spatial") while row:try: value=str(row.GetValue(fieldname))fieldvalue = valueif ftype=="String":Expression="""+fieldname +""='"+fieldvalue+"'"else:Expression="""+fieldname +""="+fieldvaluegp.AddMessage("Expression="+Expression+",clipshp="+clipshp)gp.SelectLayerByAttribute_management(clipshp, "NEW_SELECTION", Expression) out_raster =outworkspace+"/"+fieldvalue+".img"gp.ExtractByMask_sa(oldraster, clipshp, out_raster)except Exception, ErrorDesc:#If an error set output boolean parameter "Error" to True.gp.AddError(str(ErrorDesc)) row = rows.next()    3.9 对一个目录下(含子目录)所有GeoDatabase紧缩import arcgisscriptingimport osfrom os.path import join, getsizegp = arcgisscripting.create()inpath  = gp.GetParameterAsText(0)for root, dirs, files  in os.walk(inpath):         gp.workspace = root                 # List all access workspaces in the current workspace         workspaces = gp.listworkspaces("*", "access")         workspace = workspaces.next()         try:                   while workspace:                       # Compact each geodatabase                       gp.AddMessage("处理名字mdb:"+workspace)                       gp.compact(workspace)                       workspace = workspaces.next()         except Exception, ErrorDesc:             gp.AddError(str(ErrorDesc))              workspaces = gp.listworkspaces("*", "FileGDB")         workspace = workspaces.next()         try:                   while workspace:                       # Compact each geodatabase                       gp.AddMessage("处理名字FileGDB:"+workspace)                       gp.compact(workspace)                       workspace = workspaces.next()         except Exception, ErrorDesc:             gp.AddError(str(ErrorDesc))  运行界面参数设置 3.10 修复一个目录下所有shp文件# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 1 <输入workspace或gdb># --------------------------------------------------------------------------- # Import system modulesimport sys, string, os, arcgisscripting # Create the Geoprocessor objectgp = arcgisscripting.create() inworkspace = gp.GetParameterAsText(0)  gp.Workspace = inworkspacefcs = gp.ListFeatureClasses("", "Polygon", "")fc = fcs.Next()while fc:    try:       gp.RepairGeometry_management(inworkspace+"\"+fc+".shp", "DELETE_NULL")       gp.AddMessage("处理图层:"+inworkspace+"\"+fc+".shp")    except Exception, ErrorDesc:        #If an error set output boolean parameter "Error" to True.        gp.AddError(str(ErrorDesc))           # Proceed to the next feature class    fc = fcs.Next()对于MDB # ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 1 <输入workspace或gdb># --------------------------------------------------------------------------- # Import system modulesimport sys, string, os, arcgisscripting # Create the Geoprocessor objectgp = arcgisscripting.create() inworkspace = gp.GetParameterAsText(0)  gp.Workspace = inworkspacefcs = gp.ListFeatureClasses("", "Polygon", "")fc = fcs.Next()while fc:    try:       gp.RepairGeometry_management(inworkspace+"\"+fc, "DELETE_NULL")       gp.AddMessage("处理图层:"+inworkspace+"\"+fc)    except Exception, ErrorDesc:        #If an error set output boolean parameter "Error" to True.        gp.AddError(str(ErrorDesc))           # Proceed to the next feature class    fc = fcs.Next()               3.11 修复一个MBD下所有面文件(含数据集) # ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 1 <输入workspace或gdb># --------------------------------------------------------------------------- # Import system modulesimport sys, string, os, arcgisscripting # Create the Geoprocessor objectgp = arcgisscripting.create() inworkspace = gp.GetParameterAsText(0)  gp.Workspace = inworkspace fcs = gp.ListFeatureClasses("", "Polygon", "")fc = fcs.Next()while fc:    try:       gp.RepairGeometry_management(inworkspace+"\"+fc, "DELETE_NULL")       gp.AddMessage("处理图层:"+inworkspace+"\"+fc)    except Exception, ErrorDesc:        #If an error set output boolean parameter "Error" to True.        gp.AddError(str(ErrorDesc))           # Proceed to the next feature class    fc = fcs.Next() datasets = gp.listdatasets("", "")dataset = datasets.Next()while dataset:    gp.AddMessage("处理图层:"+dataset)    gp.Workspace = inworkspace+"\"+dataset    fcs = gp.ListFeatureClasses("", "Polygon", "")    fc = fcs.Next()    while fc:        try:           gp.RepairGeometry_management(fc, "DELETE_NULL")           gp.AddMessage("处理图层:"+fc)        except Exception, ErrorDesc:            #If an error set output boolean parameter "Error" to True.            gp.AddError(str(ErrorDesc))               # Proceed to the next feature class        fc = fcs.Next()    dataset = datasets.Next()3.12 修复一个目录下含子目录,所有MBD中下面文件(含数据集)import arcgisscriptingimport osfrom os.path import join, getsizegp = arcgisscripting.create()inpath  = gp.GetParameterAsText(0)for root, dirs, files  in os.walk(inpath):         gp.workspace = root         # List all access workspaces in the current workspace         workspaces = gp.listworkspaces("*", "access")                 inworkspace = workspaces.next()         while inworkspace:                   gp.Workspace = inworkspace                    fcs = gp.ListFeatureClasses("", "Polygon", "")                   fc = fcs.Next()                   while fc:                            try:                                     gp.RepairGeometry_management(inworkspace+"\"+fc, "DELETE_NULL")                                     gp.AddMessage("处理图层:"+inworkspace+"\"+fc)                            except Exception, ErrorDesc:                                     #If an error set output boolean parameter "Error" to True.                                     gp.AddError(str(ErrorDesc))                            # Proceed to the next feature class                            fc = fcs.Next()                    datasets = gp.listdatasets("", "")                   dataset = datasets.Next()                   while dataset:                            gp.AddMessage("处理图层:"+dataset)                            gp.Workspace = inworkspace+"\"+dataset                            fcs = gp.ListFeatureClasses("", "Polygon", "")                            fc = fcs.Next()                            while fc:                                     try:                                               gp.RepairGeometry_management(fc, "DELETE_NULL")                                               gp.AddMessage("处理图层:"+fc)                                     except Exception, ErrorDesc:                                               #If an error set output boolean parameter "Error" to True.                                               gp.AddError(str(ErrorDesc))                                     # Proceed to the next feature class                                     fc = fcs.Next()                            dataset = datasets.Next()                   inworkspace = workspaces.next() 3.13 #修复一个目录下含子目录,所有shp面文件import arcgisscriptingimport osfrom os.path import join, getsizegp = arcgisscripting.create()inpath  = gp.GetParameterAsText(0)for root, dirs, files  in os.walk(inpath):         gp.workspace = root         inworkspace=root                 fcs = gp.ListFeatureClasses("", "Polygon", "")         fc = fcs.Next()         while fc:                   try:                            gp.RepairGeometry_management(inworkspace+"\"+fc+".shp", "DELETE_NULL")                            gp.AddMessage("处理图层:"+inworkspace+"\"+fc+".shp")                   except Exception, ErrorDesc:                            #If an error set output boolean parameter "Error" to True.                                     gp.AddError(str(ErrorDesc))                                     # Proceed to the next feature class                   fc = fcs.Next()                              3.14 将一个目录下含子目录所有gdb转成mdb # -*- coding: cp936 -*-# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2010 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 1 <输入workspace>,把一个目录含子目录的gdb,转换为mdb# --------------------------------------------------------------------------- # Import system modulesimport sys, string, os, arcgisscriptingdef tomdb(inworkspace,outworkspace,gp):    gp.AddMessage("进入子函数处理图层:"+outworkspace+":"+inworkspace+"===========")    pathstr=os.path.dirname(outworkspace)    if not os.path.exists(pathstr):       os.makedirs(pathstr)       if not gp.Exists(outworkspace):        gp.CreatePersonalGDB(pathstr,os.path.basename(outworkspace))    gp.AddMessage("到这里:"+outworkspace+":"+inworkspace+"===========")    gp.Workspace = inworkspace    fcs = gp.ListFeatureClasses("", "", "")    fc = fcs.Next()    while fc:               try:                    gp.AddMessage("进入子函数处理图层:"+inworkspace+"\"+fc)                    gp.CopyFeatures(inworkspace+"\"+fc, outworkspace+"\"+fc)            except Exception, ErrorDesc:                    #If an error set output boolean parameter "Error" to True.                    gp.AddError(str(ErrorDesc))                    # Proceed to the next feature class            fc = fcs.Next()            #数据集    pItems = gp.ListDatasets()    pItem = pItems.Next()    while pItem:            try:                    gp.AddMessage("处理数据集:"+inworkspace+"\"+pItem)                    gp.Copy_management(inworkspace+"\"+pItem, outworkspace+"\"+pItem,"FeatureDataset")            except Exception, ErrorDesc:                    #If an error set output boolean parameter "Error" to True.                    gp.AddError(str(ErrorDesc))            pItem = pItems.Next()              # Create the Geoprocessor objectgp = arcgisscripting.create() inworkspace = gp.GetParameterAsText(0)outworkspace = gp.GetParameterAsText(1)if not gp.Exists(outworkspace):    gp.CreateFolder_management(os.path.dirname(outworkspace),os.path.basename(outworkspace))     inpath  = gp.GetParameterAsText(0)for root, dirs, files  in os.walk(inpath):         gp.workspace = root                       workspaces = gp.listworkspaces("*", "FileGDB")         workspace = workspaces.next()         try:                   while workspace:                       # Compact each geodatabase                       gp.AddMessage("处理名字FileGDB:"+workspace)                       outname=workspace.replace(inworkspace,"")+os.path.basename(workspace)                                     p=outname.find(".")                       outname=outname[0:p]+".mdb"                       tomdb(workspace,outworkspace+os.sep+outname,gp)                       workspace = workspaces.next()         except Exception, ErrorDesc:             gp.AddError(str(ErrorDesc))    3.15     在不同工作空间类型之间迁移数据 import arcpymxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")mxd.replaceWorkspaces(r"C:\Project\Data", "SHAPEFILE_WORKSPACE", r"C:\Project\Data\Parcels.gdb", "FILEGDB_WORKSPACE")mxd.replaceWorkspaces(r"C:\Project\Data\Transportation.mdb", "ACCESS_WORKSPACE", r"C:\Project\Data\Transportation.gdb", "FILEGDB_WORKSPACE")mxd.saveACopy(r"C:\Project\Project2.mxd")del mxd 3.16 综合例子# ---------------------------------------------------------------------------# rr.py# Created on: 周二 十一月 02 2010 07:04:51 下午#   (generated by ArcGIS/ModelBuilder)# Usage: rr <表达式> <计算># ---------------------------------------------------------------------------# Import system modulesimport sys, string, os, arcgisscripting#批量数据图层备份# Create the Geoprocessor objectgp = arcgisscripting.create()gp.AddToolbox("C:/Program Files (x86)/ArcGIS/ArcToolbox/Toolboxes/Analysis Tools.tbx")gp.overwriteoutput = 1def update59(DLTB,DLFH):        rows =gp.searchcursor(DLTB,"DLBM Like '2*'")        row = rows.Next()        uniqueList = []        while row:                if row.GetValue("DLBM") not in uniqueList:                        uniqueList.append(row.GetValue("DLBM"))                row = rows.Next()        dltb_Layer="dltb_Layer"        dlfh_layer="dlfh_layer"        for dldm in uniqueList:                gp.MakeFeatureLayer_management(DLTB, dltb_Layer, "[DLBM] LIKE '"+dldm+"'")                gp.MakeFeatureLayer_management(DLFH, dlfh_layer)                gp.SelectLayerByLocation_management(dlfh_layer, "INTERSECT", dltb_Layer, "", "NEW_SELECTION")                if (dldm==201) or  (dldm==202) or (dldm==203):                        gp.AddMessage("删除:"+str(gp.getcount(dlfh_layer)))                        gp.DeleteFeatures_management(dlfh_layer) #不需要地类符号                                                           else:                        result=gp.CalculateField_management(dlfh_layer, "DLBM", dldm, "VB", "")                        gp.AddMessage("更新:"+str(result)+":"+str(gp.getcount(dlfh_layer)))       inworkspace = gp.GetParameterAsText(0) #分幅数据所在目录哦layername = "DLFH" #原始名称newlayername = "DLFH1" #新名称for root, dirs, files  in os.walk(inworkspace):        gp.workspace = root        workspaces = gp.listworkspaces("*", "access")        workspace = workspaces.next()        while workspace:                try:                        gp.workspace = workspace                        DLTB_Select=workspace+"\"+layername                        newtablename=workspace+"\"+newlayername                                               if not gp.Exists(newtablename):                                gp.Select_analysis(DLTB_Select,newtablename,"") #备份                                gp.AddMessage("备份:"+DLTB_Select+"为:"+newtablename)                        gp.CalculateField_management(DLTB_Select, "DLBM", "mid([DLBM],1,3)", "VB", "")                        #更新05-09符号                        DLTB=workspace+"\\DLTB"                        update59(DLTB,DLTB_Select)                                                                                                           except Exception, ErrorDesc:                        gp.AddError(str(ErrorDesc))                workspace = workspaces.next()

0 0